我有一个使用CMake设置的项目,我想在项目中构建一个目标文件并输出其llvm IR表示,以便系统地检查生成的输出。
到目前为止我所拥有的是:
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
separate_arguments(COMPILE_FLAGS UNIX_COMMAND ${CMAKE_CXX_FLAGS})
list(APPEND COMPILE_FLAGS "-S" "-emit-llvm" "-o" "example1.llvm")
add_custom_command(
TARGET example1 #example1 is the target that builds the actual executable
POST_BUILD
COMMAND ${CMAKE_CXX_COMPILER}
ARGS ${COMPILE_FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/calculator1.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Output the llvm IR representation"
)
endif()
不幸的是${CMAKE_CXX_FLAGS}
不包含在实际编译中传递给clang的所有参数。我至少想念额外的包含目录,可能还有别的东西。
我试过
get_target_property(MYVAR example1 COMPILE_FLAGS)
和
get_property(
MYVAR
TARGET example1
PROPERTY COMPILE_FLAGS )
但他们都失败了。
如何获取传递给编译器(而不是链接器)的所有选项?
我应采取完全不同的方法吗?
答案 0 :(得分:0)
你是否从CMake中生成了Makefile:s?在这种情况下,您可以使用属性RULE_LAUNCH_COMPILE
:
RULE_LAUNCH_COMPILE指定编译规则的启动器。
Makefile生成器使用给定的启动器为编译器命令添加前缀 命令行。这旨在允许发射器拦截构建 高粒度的问题。目前是非Makefile生成器 忽略这个属性。