检索CMake中的所有链接标志

时间:2015-12-08 20:26:30

标签: cmake

在CMake中,是否可以以编程方式检索将用于给定目标的链接器标志的完整列表?我能看到的唯一方法是检查目标link.txt目录中的CMakeFiles文件。不理想。

我感兴趣的用例是收集数据以包含在pkg-config文件中。我正在编写一个库,它包含一些使用该库的可执行实用程序。构建可执行文件(特别是在静态构建库时)需要一个非平凡的链接行来链接到我的库及其依赖项。所以我想写出构建这些可执行文件所需的链接到包中包含的数据文件,以便其他客户端可以知道如何链接。

1 个答案:

答案 0 :(得分:2)

正如@Tsyvarev所评论的那样,在CMake中没有内置命令或属性“以编程方式检索链接器标志的完整列表”

但受到提示的启发“因此我想写出将这些可执行文件构建到数据文件所需的链接”我认为我找到了一个可行的解决方案(至少对于makefile生成器而言) )。

如果我理解你的要求,我们就不会谈论像你这样简单的详细输出。 CMAKE_VERBOSE_MAKEFILE,仍然需要您手动复制内容。

所以考虑以下因素:

我想出了使用我的LinkLine“链接器”添加ECHO可执行文件,其唯一目的是创建我选择的链接行文件:

set(CMAKE_ECHO_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES})
set(CMAKE_ECHO_FLAGS ${CMAKE_CXX_FLAGS})
set(CMAKE_ECHO_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS})
set(CMAKE_ECHO_IMPLICIT_LINK_DIRECTORIES ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
set(
    CMAKE_ECHO_LINK_EXECUTABLE 
    "<CMAKE_COMMAND> -E echo \"<FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>\" > <TARGET>"
)

add_executable(LinkLine "")
target_link_libraries(LinkLine MyLibraryTarget)

set_target_properties(
    LinkLine 
        PROPERTIES
            LINKER_LANGUAGE ECHO
            SUFFIX          ".txt"
)

这种方法的好处是,我的LinkLine目标的输出可以用作任何其他“官方生成的”可执行输出(例如在install() commands中或使用{{的后构建步骤3}}):

add_custom_command(
    TARGET LinkLine
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:LinkLine> PackageCfg/$<TARGET_FILE_NAME:LinkLine>
)

<强>参考