向后兼容`add_compile_definitions`

And*_*uri 3 cmake

我正在修复一些使用高于 3.10 的版本制作的 CMake 文件,但应该已编码为与 3.10 兼容。

有一个特定的行:

add_compile_definitions(SOME_BOOL_VARIABLE)
Run Code Online (Sandbox Code Playgroud)

我不知道如何更改以使其适用于 3.10 版。该add_definitions(SOME_BOOL_VARIABLE)命令是我尝试过的显而易见的事情,但会产生“没有这样的目录文件”的错误。

squ*_*les 5

从CMake的文档,的功能add_definitions()add_compile_definitions()实质上相同的:

将预处理器定义添加到当前目录及以下目标的编译器命令行(无论是在调用此命令之前还是之后添加)。

不同之处在于命令参数接受的语法。较旧的add_definitions()命令要求在-D每个定义之前添加标志。

add_definitions(-DSOME_BOOL_VARIABLE) 
Run Code Online (Sandbox Code Playgroud)

较新的add_compile_definitions()命令(在 CMake 3.12 及更高版本中可用)更清晰,并且不需要-D标志前缀。


如果您正在重构代码,现代 CMake 鼓励采用以目标为中心的方法。只要有可能,您应该更喜欢使用该target_compile_definitions()命令将预处理器定义添加到需要它们的目标。

target_compile_definitions(MyLibraryTarget PRIVATE SOME_BOOL_VARIABLE)
Run Code Online (Sandbox Code Playgroud)