cmake 不断添加 std=gnu++11 选项

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++98then的方式编辑该文件,cmake 会抱怨给我下一个错误:

src/CMakeLists.txt 中的 CMake 错误:

CXX 编译器不知道编译器特性“cxx_nullptr”

“GNU”

版本 7.2.0。

我不知道我还能尝试什么...

Cin*_*its 8

您需要设置语言标准:

set(CMAKE_CXX_STANDARD 98)
Run Code Online (Sandbox Code Playgroud)

根据编译器的不同,它也可能启用扩展。要禁用 GNU 扩展还添加:

set(CMAKE_CXX_EXTENSIONS OFF)
Run Code Online (Sandbox Code Playgroud)

请注意,设置此选项仅适用于指定的目标和相关目标。

有看看本节CMake的手册的有关编译器功能的详细信息。但是请注意,使用此


neg*_*ega 2

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_STANDARD98GCC-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。