我现在感觉有点愚蠢.在最近将一些较小的项目转换为使用CMake之后,我决定还删掉一些"Platform_Config.h"文件.这些文件包含一些预处理指令,如#define USE_NEW_CACHE控件编译.
我将如何"转换"这些定义以便用CMake控制?理想情况下,通过使用这些"缓存"变量,用户可以轻松编辑.
And*_*dré 22
有两种选择.您可以使用add_definitions方法将定义作为编译器标志传递:例如,项目中的某处cmakelists.txt:
add_definitions( -DUSE_NEW_CACHE )
Run Code Online (Sandbox Code Playgroud)
CMake将确保将-D前缀转换为编译器的右侧标志(/ d表示msvc,-D表示gcc).
或者,查看configure_file.它更复杂,但可能更适合使用Platform_Config文件的原始方法.
您可以创建一个输入文件,类似于原始的Platform_Config.h,并为其添加"#ckekedefine"行.
我们在Platform_Config.h.in中调用:
// In Platform_Config.h.in
#cmakedefine USE_NEW_CACHE
// end of Platform_Config.h.in
Run Code Online (Sandbox Code Playgroud)
然后运行
configure_file( ${CMAKE_SOURCE_DIR}/Platform_Config.h.in ${CMAKE_BINARY_DIR}/common/Platform_Config.h )
Run Code Online (Sandbox Code Playgroud)
它将在build-dir中生成一个新的Platform_Config文件.cmake中的那些变量也是一个cmakedefine,它们将出现在生成的文件中,其他变量将被注释掉或取消.
当然,在将其包含在源文件中时,应确保正确找到实际生成的文件.
0xb*_*00d 13
option命令可能会提供您要查找的内容.
将它与目标上的COMPILE DEFINITIONS属性一起使用,我想你已经完成了.要在目标上设置属性,请使用命令set target properties
option(DEBUGPRINTS "Prints a lot of debug prints")
target(myProgram ...)
if(DEBUGPRINTS)
set_target_properties(myProgram PROPERTIES COMPILE_DEFINITIONS "DEBUGPRINTS=1")
endif()
Run Code Online (Sandbox Code Playgroud)
编辑:
我在示例中写的选项显示为CMake GUI中的复选框.
| 归档时间: |
|
| 查看次数: |
19877 次 |
| 最近记录: |