Manuel Pena
Manuel Pena

Reputation: 314

cmake keeps adding the std=gnu++11 option

I'm trying to compile a project in C++ using cmake, and in the page of the project they tell me that it will crash if I don't add the standard 98. (I'm on a mac) I've tried all I found on the internet and I could manage to make the cmake use the option -std=c++98 but it also adds -DNDEBUG -std=gnu++11. (I saw it using the make VERBOSE=1 option)

I would like to get rid of that. Using the --trace option I could see that the option is set in a file which is in the cellar folder, that is, is something that has to do with cmake itself and not in the CMakeList.txt file im using.

How can I solve this problem?

If it can help the code I'm trying to compile is this: SAMoS

Thank you.

UPDATE:

with the --trace option I was able to see that the -std=gnu++11 option was selected in the file:

/usr/local/Cellar/cmake/3.9.4.1/share/cmake/Modules/Compiler/GNU-CXX.cmake which can be seen here GNU-CXX.cmake

If I eddit that file in a way that every if sets the option to -std=c++98 then, the cmake complains giving me the next error:

CMake Error in src/CMakeLists.txt:

The compiler feature "cxx_nullptr" is not known to CXX compiler

"GNU"

version 7.2.0.

I don't know what else can I try...

Upvotes: 10

Views: 8093

Answers (2)

Cinder Biscuits
Cinder Biscuits

Reputation: 5261

You need to set the language standard:

set(CMAKE_CXX_STANDARD 98)

Depending on the compiler, it may enable extensions as well. To disable the GNU extensions also add:

set(CMAKE_CXX_EXTENSIONS OFF)

Note that setting this options does so only for the specified target and dependent targets.

Have take a look at this section of the CMake manual for more information on compiler features. Do note however, using this

Upvotes: 12

nega
nega

Reputation: 2747

The inclusion of VTK is polluting SAMoS's CMake scope with the C++11 requirement. You can test this by disabling VTK on your cmake command line.

$ 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

You'll notice there's no -std=gnu++11 flag anymore. Of course, since it looks like you're GCC version 7.2, you'll still want your set CMAKE_CXX_STANDARD to 98 since gcc-7.2 uses C++11 by default. (Or maybe it's C++14 now...) You can do this on your cmake command line.

$ cmake -DUSE_VTK=FALSE -DCMAKE_CXX_STANDARD=98 ..

CMake will then add -std=gnu++98 to its compile commands.

If you can't live without VTK, then you'll need to send a bug report upstream asking the SAMoS folks to clarify their documentation, or fix how they're including VTK.

Upvotes: 2

Related Questions