Man*_*ena 6 macos gcc std cmake
我正在尝试使用C++编译一个项目cmake
,并且在项目的页面中,他们告诉我如果我不添加标准 98 它将崩溃。(我在 mac 上)我已经尝试了所有我在互联网上找到,我可以设法cmake
使用该选项,-std=c++98
但它也添加了-DNDEBUG -std=gnu++11
. (我看到它使用 makeVERBOSE=1
选项)
我想摆脱它。使用该--trace
选项,我可以看到该选项设置在地窖文件夹中的文件中,也就是说,与cmake
它本身有关,而不是在CMakeList.txt
我使用的文件中。
我怎么解决这个问题?
如果它可以帮助我尝试编译的代码是这样的: SAMoS
谢谢你。
更新:
使用该--trace
选项,我能够看到-std=gnu++11
在文件中选择了该选项:
/usr/local/Cellar/cmake/3.9.4.1/share/cmake/Modules/Compiler/GNU-CXX.cmake
可以在这里看到GNU-CXX.cmake
如果我以每个 if 将选项设置为-std=c++98
then的方式编辑该文件,cmake 会抱怨给我下一个错误:
src/CMakeLists.txt 中的 CMake 错误:
CXX 编译器不知道编译器特性“cxx_nullptr”
“GNU”
版本 7.2.0。
我不知道我还能尝试什么...
您需要设置语言标准:
set(CMAKE_CXX_STANDARD 98)
Run Code Online (Sandbox Code Playgroud)
根据编译器的不同,它也可能启用扩展。要禁用 GNU 扩展还添加:
set(CMAKE_CXX_EXTENSIONS OFF)
Run Code Online (Sandbox Code Playgroud)
请注意,设置此选项仅适用于指定的目标和相关目标。
有看看本节CMake的手册的有关编译器功能的详细信息。但是请注意,使用此
VTK 的包含正在污染 SAMoS 的 CMake 范围与 C++11 要求。您可以通过在cmake
命令行上禁用 VTK 来测试这一点。
$ cd ~SAMoS
$ mkdir build; cd build
$ cmake -DVTK_FOUND=FALSE ../
[...]
$ make VERBOSE=1
[...]
Scanning dependencies of target samos
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f src/CMakeFiles/samos.dir/build.make src/CMakeFiles/samos.dir/build
[ 1%] Building CXX object src/CMakeFiles/samos.dir/samos.cpp.o
cd /Users/nega/SAMoS/build/src && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DCGAL_USE_GMP -DCGAL_USE_MPFR -DHAS_CGAL -isystem /usr/local/include -I/include -I/Users/nega/SAMoS/src/constraints -I/Users/nega/SAMoS/src/dump -I/Users/nega/SAMoS/src/log -I/Users/nega/SAMoS/src/integrators -I/Users/nega/SAMoS/src/messenger -I/Users/nega/SAMoS/src/parser -I/Users/nega/SAMoS/src/potentials -I/Users/nega/SAMoS/src/potentials/external -I/Users/nega/SAMoS/src/potentials/pair -I/Users/nega/SAMoS/src/potentials/bond -I/Users/nega/SAMoS/src/potentials/angle -I/Users/nega/SAMoS/src/system -I/Users/nega/SAMoS/src/utils -I/Users/nega/SAMoS/src/aligner -I/Users/nega/SAMoS/src/aligner/pair -I/Users/nega/SAMoS/src/aligner/external -I/Users/nega/SAMoS/src/population -I/Users/nega/SAMoS/src -I/Users/nega/SAMoS/build -DNDEBUG -o CMakeFiles/samos.dir/samos.cpp.o -c /Users/nega/SAMoS/src/samos.cpp
Run Code Online (Sandbox Code Playgroud)
你会发现不再有-std=gnu++11
旗帜了。当然,由于看起来您使用的是 GCC 版本 7.2,因此您仍然希望设置CMAKE_CXX_STANDARD
为98
GCC-7.2 默认情况下使用 C++11 的版本。(或者现在可能是 C++14...)您可以在cmake
命令行上执行此操作。
$ cmake -DUSE_VTK=FALSE -DCMAKE_CXX_STANDARD=98 ..
Run Code Online (Sandbox Code Playgroud)
然后 CMake 将添加-std=gnu++98
到其编译命令中。
如果您不能没有 VTK,那么您需要向上游发送错误报告,要求 SAMoS 人员澄清他们的文档,或者修复他们如何包含 VTK。
归档时间: |
|
查看次数: |
3563 次 |
最近记录: |