从外部.cpp或.hpp定义的C ++宏

时间:2014-04-15 16:04:06

标签: c++ macros cmake

我想做一些像在调试或发布模式下构建的应用程序。

是否可以在.cpp或.hpp之外定义一个宏?

我正在使用CMake。我已经看到add_definitions(...)正在做这样的事情。我应该创建两个可执行文件projproj_debug,并为调试定义一个add_definitions(...)的宏?这是一个好方法吗?如果没有,你会建议我做什么?

4 个答案:

答案 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