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

C++ C++;从.cpp或.hpp外部定义的宏,c++,macros,cmake,C++,Macros,Cmake,我想做一些类似于在调试或发布模式下构建的应用程序的事情 是否可以在.cpp或.hpp之外定义宏 我正在使用CMake。我已经看到,add_definitions(…)正在做类似的事情。我应该创建两个可执行文件proj和proj\u debug,并为debug定义一个带有add\u定义(…)的宏吗?这是一个好方法吗?如果没有,你会建议我怎么做?ManG++ 查找用于定义宏的-D选项 您可以配置makefiles来设置该选项 Mang++ 查找用于定义宏的-D选项 您可以配置makefiles来设置

我想做一些类似于在调试或发布模式下构建的应用程序的事情

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

我正在使用CMake。我已经看到,
add_definitions(…)
正在做类似的事情。我应该创建两个可执行文件
proj
proj\u debug
,并为debug定义一个带有
add\u定义(…)
的宏吗?这是一个好方法吗?如果没有,你会建议我怎么做?

ManG++

查找用于定义宏的-D选项

您可以配置makefiles来设置该选项

Mang++

查找用于定义宏的-D选项

您可以配置makefiles来设置该选项


要在不同的文件中定义宏,可以通过以下方式完成:

1) 您可以在任何其他
.h
文件中定义宏。 并将该文件包含在
.cpp
文件中。 这可以帮助您在不同的文件中定义宏 要检查宏的
调试和发布
版本,请使用
\u Debug
\u Release

2) 另一种方法是使用@Soren告诉的方法。
使用
set(CMAKE\u CXX\u FLAGS“-g-Wall-dxxx”)

在不同的文件中定义宏可以通过以下方式完成:

1) 您可以在任何其他
.h
文件中定义宏。 并将该文件包含在
.cpp
文件中。 这可以帮助您在不同的文件中定义宏 要检查宏的
调试和发布
版本,请使用
\u Debug
\u Release

2) 另一种方法是使用@Soren告诉的方法。 使用
set(CMAKE\u CXX\u标志“-g-Wall-dxxx”)

像这样。我应该创建两个可执行文件proj和proj_debug和for debug吗

没必要

使用cmake,您可以在配置项目时更改
cmake\u BUILD\u类型
变量。然后在
CMakeLists.txt
中,您可以执行以下操作:

if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
    add_definitions(-DMY_DEBUG_MACRO)
endif()
然后您可以轻松地配置项目两次(在两个目录中):一次将
CMAKE\u BUILD\u TYPE
设置为
Debug
,一次将
CMAKE\u BUILD\u TYPE
设置为
Release

像这样。我应该创建两个可执行文件proj和proj_debug和for debug吗

没必要

使用cmake,您可以在配置项目时更改
cmake\u BUILD\u类型
变量。然后在
CMakeLists.txt
中,您可以执行以下操作:

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

然后,您可以轻松地配置项目两次(在两个目录中):一次将
CMAKE\u BUILD\u TYPE
设置为
Debug
,一次将
CMAKE\u BUILD\u TYPE
设置为
Release

使用以下内容:

target_compile_definitions(myproj PRIVATE $<$<CONFIG:Debug>:MY_DEBUG_MACRO>)
target\u compile\u定义(myproj PRIVATE$)


这适用于所有生成器,并且是有文档记录的、正确的、受支持的方法(由我实现:)。

使用类似以下内容:

target_compile_definitions(myproj PRIVATE $<$<CONFIG:Debug>:MY_DEBUG_MACRO>)
target\u compile\u定义(myproj PRIVATE$)


这适用于所有生成器,是有文档记录的、正确的、受支持的方法(由我实现:)。

查询CMAKE_BUILD_类型是不可移植的。您的建议只适用于Makefile和Ninja生成器,而不适用于IDE生成器。查询CMAKE_BUILD_类型是不可移植的。您的建议只适用于Makefile和Ninja生成器,而不适用于IDE生成器。当我编写此命令时,它会显示
未知CMake命令“target\u compile\u features”。
为什么?我是否应该将其不放在cmake文件中?然后需要更新以使用cmake 2.8.11或更高版本:)当我编写此命令时,它会显示
未知cmake命令“target\u compile\u features”。
为什么?我应该不把它放在cmake文件中吗?然后你需要更新以使用cmake 2.8.11或更高版本:)这对我来说很有效,但是在命令行中使用
cmake-Ddebug..
if(debug)set(cmake\u CXX_FLAGS“-g-Wall-Ddebug”)else()set(cmake\u CXX_FLAGS“-g-Wall”)endif()comand。感谢CMake v2.8.11以后的版本是正确的。如果做不到这一点,
add_definitions
可能比更新
CMAKE_CXX_标志
更合适。这对我来说很有效,但在命令行中使用
CMAKE-Ddebug..
if(debug)集(CMAKE>if(debug)FLAGS“-g-Wall-Ddebug”)else()集(CMAKE_CXX_FLAGS“-g-Wall”)endif()comand。感谢CMake v2.8.11以后的版本是正确的。否则,
add_definitions
可能比更新
CMAKE_CXX_标志更合适。