本文介绍cmake如何使用target_compile_definitions()为编译目标添加宏定义,让我们可以使用不同的配置编译出不同的目标。
项目目录结构:
test/
├── build
├── CMakeLists.txt
└── proj
└── main.c
main.c:
#include <stdio.h>
int main()
{
#ifdef TEST_MACRO
printf("TEST_MACRO has been defined\n");
#else
printf("TEST_MACRO has not been defined\n");
#endif
return 0;
}
~
CMakeLists.txt:
cmake_minimum_required(VERSION 3.27.0)
project(proj_cmake_learn)
add_executable(test1 ./proj/main.c)
target_compile_definitions(test1 PUBLIC TEST_MACRO)
add_executable(test2 ./proj/main.c)
这样我们用一套代码编译出了两个目标test1和test2,这两个目标用不同的宏配置,可以用于不同的项目。
target_compile_definitions()还支持为宏赋值,比如可以这样写增加灵活性:
target_compile_definitions(test1 PUBLIC TEST_MACRO=1)