使用 cmake 将列表中定义的变量添加到 add_compile_definitions()

Add variables defined in a list to add_compile_definitions() using cmake

我有一个在 cmake 中定义的变量列表,它是使用来自 main CMakeLists.txt:

add_custom_target(gen_a
   COMMAND ${CMAKE_COMMAND} -P "gen_sigs.cmake"
)
add_dependencies(${PROJECT_NAME} gen_a)

我的gen_sigs.cmake:

set(SIG_LIST SIGNAL_A=0 SIGNAL_B=1 SIGNAL_C=0 )

我想使用此列表将预处理器定义添加到编译器命令行,如(在 main CMakeLists.txt 中):

add_compile_definitions( 
  SIGNAL_A=0 
  SIGNAL_B=1
  SIGNAL_C=0
)

我尝试使用以下但它不起作用(在主要 CMakeLists.txt):

add_compile_definitions( 
  ${SIG_LIST}
)

我是 cmake 的新手,所以有关如何完成这项工作的任何建议都会有所帮助。此外, add_custom_target 是在 add_compile_definitions() 之前定义的,但仍然无济于事。我的猜测是执行顺序有问题,因为当我在 cmakelists.txt 中打印 ${SIG_LIST} 时,它没有任何价值。有没有办法向 add_compile_definitions 添加依赖项,以便我的 add_custom_target 命令在 add_compiler_definitions()?

之前被强制执行

你的问题不是很清楚,但根据你所展示的内容,以下应该可行:

include("${CMAKE_CURRENT_SOURCE_DIR}/gen_sigs.cmake")

target_compile_definitions(main_target PRIVATE ${SIG_LIST})

添加自定义目标将处理推迟到构建时间,但您(似乎)想要做的基本上是 configure/generation 时间的事情。 include() 将导致外部脚本立即在与调用相同的范围内执行。