35
votes

I'm in a situation where I should not disturb the existing CMakeLists.txt files, but I still should add some g++ system include directory to my build.

In other words, I need -isystem /path/to/my/include added to my compiler flags, but when calling something like cmake ...

Maybe something like cmake .. -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -isystem /path/to/my/include"? Is there a way to do this?

4
so you want to add compilation flags and then remove them? Or do you just want to add them?Marco A.
I just want to add them without touching CMakeLists.Ayberk Özgür
Note that the variable reference, $CMAKE_CXX_FLAGS, would reference a shell variable. Probably not what you would want. Actually, it should be useless on the command line.Alexis Wilke

4 Answers

26
votes

I have the same problem. I found two solutions:

  1. The one proposed by sakra in a previous answer, i.e. setting an environment variable with C++ flags:

    export CXXFLAGS=-isystem\ /path/to/my/include
    cmake <path to my sources>
    

    OR the same thing, but environment variable are set only for this CMake call:

    CXXFLAGS=-isystem\ /path/to/my/include cmake <path to my sources>
    

    IMPORTANT: you must clean your build directory (i.e. clean the CMake cache) before launching any of this form. Without cleaning the cache, CMake will continue using your cached CMAKE_CXX_FLAGS from the previous run.

  2. Directly setting CMAKE_CXX_FLAGS in cmake string:

    cmake -DCMAKE_CXX_FLAGS=-isystem\ /path/to/my/include <path to my sources>
    

I believe that it can be done by a more 'native' way, but I didn't find a variable responsible for paths to headers in CMake.

15
votes

You can set the environment variable CXXFLAGS before invoking CMake.

$ export CXXFLAGS=-isystem\ /path/to/my/include
$ cmake ..

CMake will the initialize the cache variable CMAKE_CXX_FLAGS with the flags from the environment variable. The variable affects all build types.

7
votes

Using -DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=<something> worked for me even without toolchain file. This avoids cluttering compiler flags.

1
votes

Just an additional note to the other answers: with CMake 3.15.3 on macOS 10.14.5, only the solution using the CMake flag seems to work properly.

So, in my case, only this solution worked fine:

cmake -DCMAKE_CXX_FLAGS=-I\ /path/to/include <path/to/source>