我想做一些像在调试或发布模式下构建的应用程序。
是否可以在.cpp或.hpp之外定义一个宏?
我正在使用CMake。我已经看到add_definitions(...)
正在做这样的事情。我应该创建两个可执行文件proj
和proj_debug
,并为调试定义一个add_definitions(...)
的宏?这是一个好方法吗?如果没有,你会建议我做什么?
答案 0 :(得分:2)
使用类似的东西:
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
这适用于所有生成器,并且是记录的,正确的,支持的方式(并由我实现:))。
答案 1 :(得分:1)
Man g ++ http://linux.die.net/man/1/g++
查找用于定义宏的-D选项
您可以配置您的makefile以设置该选项http://www.cmake.org/Wiki/CMake_Useful_Variables
set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")
答案 2 :(得分:1)
要在不同文件中定义宏,可以通过以下方式完成:
1)您可以在任何其他.h
文件中定义宏。
并将文件包含在.cpp
文件中。
这可以帮助您在不同的文件中定义宏
要检查Debug and Release
版本的宏,请使用_Debug
或_Release
宏。
2)另一种方法是使用@Soren讲述的方式。
使用set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")
答案 3 :(得分:0)
像这样。我应该创建两个可执行文件proj和proj_debug以及用于调试
不需要。
使用cmake,您可以在配置项目时更改CMAKE_BUILD_TYPE
变量。然后在CMakeLists.txt
中,您可以执行以下操作:
if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
add_definitions(-DMY_DEBUG_MACRO)
endif()
然后,您可以轻松配置项目两次(在两个目录中):一次将CMAKE_BUILD_TYPE
设置为Debug
,将CMAKE_BUILD_TYPE
设置为Release
。