使用CMake将进程输出作为特定目标的编译选项传递时,请避免使用引号

时间:2014-12-25 21:20:23

标签: cmake quotes

我遇到了CMake的问题: 我使用execute_process()来设置变量,我希望该变量将其作为选项传递给编译器。 CMake在变量周围设置引号,以便编译器输入错误。

具体来说:我需要只使用特定目标编译SDL2。

# CMakeLists.txt
execute_process(COMMAND "sdl2-config" "--cflags" OUTPUT_VARIABLE SDL2_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS})

sdl2-config --cflags的输出是:

-I/usr/include/SDL2 -D_REENTRANT

CMake现在以这种方式调用编译器:

/usr/bin/c++ ... "-I/usr/include/SDL2 -D_REENTRANT" ...

当然这不起作用。我需要摆脱引号。

如果使用

add_definitions(${SDL2_CFLAGS})
一切正常。但我需要target_compile_options,因为我希望选项不在所有目标上。

1 个答案:

答案 0 :(得分:4)

您可以使用separate_arguments命令:

separate_arguments(SDL2_CFLAGS UNIX_COMMAND "${SDL2_CFLAGS}")
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS})