Home > other >  CMake command line define macro without value
CMake command line define macro without value

Time:08-09

I have the following line in my CMakeLists.txt

add_compile_definitions(DEBUG=$(DEBUG))

so when I compile my code with Makefile, I can do this

make DEBUG=1

But what I really want is to just define the DEBUG macro without setting any value to it. Is there a way I can do this on a command line with cmake?

CodePudding user response:

With CMake you can, at configuration time, add some CMake variables. For example you can do this cmake -S <src_folder> -B <build_folder> -DDEBUG=ON. This way you will have access to the variable DEBUG in your CMake.

In your CMake you will have this code

if(DEBUG)
   add_compile_definition(DEBUG)
endif()

(Note that instead of add_compile_definitions, it is recommended to use target_compile_definitions which will set your DEBUG macro only for one target and not globally to your project.
Example:

add_executable(my_target main.cpp)
target_compile_definition(my_target PRIVATE DEBUG)

PRIVATE means that this compile_definition will only be used by the target my_target and will not be propagated to others.)

But if you're only concern of the building type, I suggest that you use CMake variables that are already present within CMake. You can use CMAKE_BUILD_TYPE which will contains Debug, Release or whatever depending on what type of build you want. Your code will now be this

if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
   add_compile_definition(DEBUG)
endif()

And you can use this command line cmake -S <src_folder> -B <build_folder> -DCMAKE_BUILD_TYPE=Debug

And here the documentation https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type

Note that this solution will only works for Mono-config generators like Makefile or Ninja and will not works with Visual Studio or Xcode

  • Related