编译没有链接

时间:2015-02-12 21:53:19

标签: c++ cmake clang llvm

我有一个使用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 )

但他们都失败了。

如何获取传递给编译器(而不是链接器)的所有选项?

我应采取完全不同的方法吗?

1 个答案:

答案 0 :(得分:0)

你是否从CMake中生成了Makefile:s?在这种情况下,您可以使用属性RULE_LAUNCH_COMPILE

  

RULE_LAUNCH_COMPILE指定编译规则的启动器。

     

Makefile生成器使用给定的启动器为编译器命令添加前缀   命令行。这旨在允许发射器拦截构建   高粒度的问题。目前是非Makefile生成器   忽略这个属性。