【问题标题】:CMake: link optionsCMake:链接选项
【发布时间】:2021-08-24 18:50:44
【问题描述】:

我有一个定义多个目标库(静态和动态)的 Android CMakeList.txt。 对于其中一个库,我需要将 -Wl,--version-script 与特定版本脚本一起传递,为了实现这一点,我正在使用 target_link_libraries:

target_link_libraries( # Specifies the target library.
        native-lib1
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        -Wl,--version-script=${CMAKE_SOURCE_DIR}/../../../../../../native1.map
        )

不幸的是,-Wl 选项被添加到我所针对的所有其他库中,导致我出现任何类型的链接问题,因为 native1.map 仅引用 native-lib1 中的函数。 我也尝试过使用 target_link_options 和 add_link_options 但 Android Studio 返回错误,指出这些不是有效的 CMake 命令。

有没有办法为 CMakeList.txt 中的单个库定义链接器选项?

【问题讨论】:

    标签: android c++ cmake linker


    【解决方案1】:

    我假设该选项在此处被视为PUBLIC。一般来说,我建议总是在使用target_*** 命令时指定“可见性”。

    在这种情况下,我建议使用target_link_options,因为这样可以更清楚地说明意图。

    target_link_libraries( # Specifies the target library.
            native-lib1
            # Links the target library to the log library
            # included in the NDK.
            ${log-lib}
            )
    target_link_options(native-lib1
        PRIVATE 
            "-Wl,--version-script=${CMAKE_SOURCE_DIR}/../../../../../../native1.map"
    )
    

    【讨论】:

    • 非常感谢 fabian 的回答,不幸的是,在尝试使用 target_link_options 时出现以下错误:Unknown CMake command "target_link_options".
    • 我可能已经找到了问题的原因:即使我已经安装了 CMake 3.18,我的项目似乎使用的是 3.10,我现在正在寻找一种方法来更改 CMake 版本
    • 我确认我需要更新我的 build.gradle 以使用 cmake 3.18,现在我的项目构建正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多