C++ 从外部.cpp或 .hpp 定义的宏
C++ Macro defined from outside .cpp or .hpp
我想做一些类似在调试或发布模式下构建的应用程序的事情。
是否可以在.cpp或 .hpp 之外定义宏?
我正在使用CMake。我已经看到add_definitions(...)
正在做这样的事情。我应该proj
和proj_debug
创建两个可执行文件,并为调试定义一个带有add_definitions(...)
的宏吗?这是一个好方法吗?如果没有,你会建议我怎么做?
使用类似这样的东西:
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
这适用于所有生成器,并且是记录在案的、正确的、受支持的方式(并由我:)实现(。
Man g++ http://linux.die.net/man/1/g++
查找用于定义宏的 -D 选项
您可以配置生成文件以设置该选项 http://www.cmake.org/Wiki/CMake_Useful_Variables
set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")
文件中定义宏,可以通过以下方式完成:
1( 您可以在任何其他.h
文件中定义宏。 并将文件包含在.cpp
文件中。 这可以帮助您在不同的文件中定义宏 要检查宏Debug and Release
版本,请使用_Debug
或_Release
宏。
2(另一种方法是使用@Soren告诉的方式。 使用set(CMAKE_CXX_FLAGS "-g -Wall -Dxxxx")
喜欢这个。我应该创建两个可执行文件 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
。
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- C Boost图:如何自定义回调函数VF2_PRINT_CALLBACK中的VF2_SUBGRAP_ISO.HPP
- libopencv_optflow可能不包含在optflow.hpp中指定的所有函数定义
- 如何将模板定义和实例化分为HPP和IPP文件
- /usr/include/boost/filesystem/path.hpp:307:未定义对'boost::files
- 当我在opencv中使用calib3d.hpp时重新定义类
- 我有一个为 cpp 中的某个类定义的模板函数 - 不是 hpp.可以由子类使用吗?
- 包含line_descriptor.hpp,但KeyLine和BinaryDescriptor仍未定义
- 具有全局功能的hpp / cpp拆分:.的多重定义.错误
- 如果在user.hpp中定义了boost_NO_EXCEPTIONS,则无法编译boost::shared_ptr的原因
- 如何在.cpp文件中定义内联函数,并在.hpp文件中定义签名?
- 错误:在 .../boost/serialization/access.hpp:132 上未定义对"bbque::Event::Event()"的引用
- 为什么OpenCL cl.hpp(头-only)包装器没有打破一个定义规则
- 当使用c++模块时,有任何理由将函数声明(.hpp文件)与其定义(.cpp文件)分开
- C++ 从外部.cpp或 .hpp 定义的宏