【问题标题】:Compile without linking编译不链接
【发布时间】:2015-02-12 21:53:19
【问题描述】:

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

但他们都失败了。

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

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

【问题讨论】:

    标签: c++ cmake clang llvm


    【解决方案1】:

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

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

    Makefile 生成器使用给定的启动器为编译器命令添加前缀 命令行。这是为了让启动器拦截构建 高粒度问题。当前的非 Makefile 生成器 忽略此属性。

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2012-11-19
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      相关资源
      最近更新 更多