Question

I want to do something like an application that is build in debug or release mode.

Is it possible to define a macro outside the .cpp or .hpp?

I am using CMake. I have seen that add_definitions(...) is doing something like this. Shall I create two executables proj and proj_debug and for debug define a macro with add_definitions(...)? Is this a good approach? If not, how would you suggest me to do?

Was it helpful?

Solution 2

Man g++ http://linux.die.net/man/1/g++

Look for the -D option for defining macros

and you can configure your makefiles to set that option http://www.cmake.org/Wiki/CMake_Useful_Variables

set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")

OTHER TIPS

Use something like this:

target_compile_definitions(myproj PRIVATE $<$<CONFIG:Debug>:MY_DEBUG_MACRO>)

http://www.cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html

http://www.cmake.org/cmake/help/v3.0/command/target_compile_definitions.html

http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html

This works with all generators and is the documented, right, supported way of doing it (and implemented by me :) ).

To define Macro in the different file can be done by following ways:

1) You can define Macro in any other .h file. and include the file in .cpp file. This can help you to define Macro in different file To check the Macro for Debug and Release version use _Debug or _Release Macro.

2) Another way to do this is By using the way told by @Soren. using set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")

like this. Shall I create two executables proj and proj_debug and for debug

No need.

With cmake you can change the CMAKE_BUILD_TYPE variable when configuring your project. Then in your CMakeLists.txt you can do something like:

if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
    add_definitions(-DMY_DEBUG_MACRO)
endif()

Then you can easily configure your project twice (in two directories): once with CMAKE_BUILD_TYPE set to Debug and once CMAKE_BUILD_TYPE set to Release.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top