C/cmake - 当 TARGET_LINK_LIBRARIES 中指定库时,如何向(未使用的)库添加链接器标志?

2023-11-21

在我的项目的根目录中,我有一个子目录my_lib另一个用于my_app。 图书馆my_lib定义填充链接器定义的节的表,这些表不直接由my_app,所以这个库没有链接。

为了强制链接 my_lib,我添加了标志 --whole-archive,如下所述here.

它有效!

在根目录的 CMakelist.txt 中,我有以下内容:

SET(CMAKE_EXE_LINKER_FLAGS "-mmcu=cc430f6137 -Wl,--gc-sections -Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")
ADD_SUBDIRECTORY(my_lib)

In the CMakelist.txt of my_lib I have:

ADD_LIBRARY(MY_LIB
    my_lib.c
)
TARGET_LINK_LIBRARIES(MY_LIB)

In the CMakelist.txt of my_app I have:

ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app MY_LIB)

我的问题是我只想使用这个标志(--whole-archive) if MY_LIB指定在TARGET_LINK_LIBRARIES in CMakelist.txt of my_app.

如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB)不存在,我不想添加"-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive" in the CMAKE_EXE_LINKER_FLAGS.

我尝试从根目录中的 CMakelist.txt 中删除此标志,并将以下内容添加到CMakelist.txt in my_lib子目录:

SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS "-Wl,--whole-archive -lMY_LIB -Wl,--no-whole-archive")

但这是行不通的。

我怎样才能做到这一点?


CMake 命令目标链接库允许在链接给定目标时指定库和标志。而不是直接使用目标名称MY_LIB in the TARGET_LINK_LIBRARIES调用,使用一个包装引用的变量MY_LIB--whole-archive and --no-whole-archive flags:

ADD_LIBRARY(MY_LIB
    my_lib.c
)
SET(MY_LIB_LINK_LIBRARIES -Wl,--whole-archive MY_LIB -Wl,--no-whole-archive)
...
ADD_EXECUTABLE(my_app my_app.c)
TARGET_LINK_LIBRARIES(my_app ${MY_LIB_LINK_LIBRARIES})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/cmake - 当 TARGET_LINK_LIBRARIES 中指定库时,如何向(未使用的)库添加链接器标志? 的相关文章

随机推荐

  • __builtin_return_address 对于索引 >0 返回 null?

    我想获取调用者函数的返回地址 我在用着 builtin return address 函数 但如果我给出的索引值大于 0 它将返回NULL 请帮我解决这个问题 或者告诉我任何其他功能来获得相同的效果 See 这个答案相关问题 builtin
  • 行内元素可以包含块元素吗?

    内联元素可以包含块元素 例如 列表可以有段落吗 抛开 LI 和 P 都是块级这一事实 这样做永远是无效的 但从行为角度来看 有时您可以将块级元素嵌套在内联一级元素中 但这取决于浏览器解析器 例如 在 FireFox 3 x 中 使用此标记
  • 根据另一个输入组件的值禁用/启用 JSF 输入组件

    我有两个单选按钮
  • Java客户端和C++服务器通过TCP Socket发送和接收

    我有一个 C 服务器和两个客户端 ruby 和 java 一切都在 64 位 Linux 机器上运行 java 1 7 0 17 ruby 客户端可以正常工作 但 java 版本会出现问题 在Java中 我尝试将字符串从客户端发送到服务器
  • 如何增加 HTML 表格中列的宽度?

    如何增加 HTML 表格中列的宽度 下面是我的代码 我正在努力获得第二个 td 每行中的标签进行扩展 以便输入文本框之间有更多空间 第一个 td 标签 以及 cookie 的名称及其价格 第 3 td 标签 有任何想法吗 table bor
  • 如何在 ViewModel 中使用数组?

    我的代码现在看起来像这样 每条消息有两行代码 该代码可以工作 但如果我有 30 条消息 每条消息都可以为其赋值 那么我将需要 60 行代码来声明所有内容 string msg1 string msg2 public string Msg1
  • printf 是否有通用转换说明符?

    我想打印变量值而不指定其类型 在c中 我可以做 int main int argc char argv int i 1 float f 0 1 char s s printf i n i printf f n f printf s s re
  • 获取子类别 magento

    尝试获取处于活动状态的特定类别的子项 请帮忙 我做起来有困难 我目前可以展示所有内容 但不能具体展示 将不胜感激任何帮助 category Mage getModel catalog category gt load 2 category
  • 如何在 IIS Express 中启用外部请求?

    如何在 IIS Express 中启用远程请求 斯科特 格思里 Scott Guthrie 写道这是可能的但他没有说怎么做 IIS 团队网站上有一篇博客文章正在解释如何在 IIS Express 上启用远程连接 以下是该帖子的相关部分总结
  • 更快地替换所有 dom 元素中的文本的方法?

    我正在尝试替换标签之间的所有文本 我想知道最快的方法 一个例子是尝试用任意字符串 helloWorld 替换所有文本 这样 div div RandomText1 div RandomText2 div div div 就变成这样了 div
  • Tab 键上的 NSTableView 和 NSOutlineView 编辑

    我的应用程序有一个NSOutlineView and an NSTableView 而且我两者都遇到同样的问题 选择任一行后 按 Tab 键会将第一列置于编辑模式 而不是使下一个键查看第一响应者 要进入下一个关键视图 您需要按 Tab 键浏
  • 存储数千个中型文档的最高效的面向文档的数据库引擎是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 MongoDB 还是 Redis 我听说我应该在 MongoDB 中保持较小的集合 以实现更好的索引 以及适合 RAM 的索引 并且我听说 Redi
  • Python正则表达式“对象没有属性”

    我一直在整理我们需要用新内容更新的页面列表 我们正在切换媒体格式 在此过程中 我正在对正确包含新内容的页面进行编目 这是我正在做的事情的总体思路 遍历文件结构并获取文件列表 对于读取到缓冲区的每个文件 并使用正则表达式搜索来匹配特定标签 如
  • 我的 Docker 容器应用程序可以访问主机的麦克风和扬声器吗? (Mac、Windows、Linux)

    我正在构建一个无头软件电话应用程序 我知道我可以使用给定的工具构建 wss 或 Web 服务器 但是我的 Web 应用程序需要使用主机的扬声器和麦克风执行一些 pjsip 和其他编解码器操作 这些设备是否在 mac windows linu
  • Rails 3.1 应用程序未定义 JST

    大多数关于 asset pipeline 和 javascript 模板的 Rails 3 1 教程让我相信 asset pipeline 将拾取任何 jst 文件并将它们放入 js 文件可用的 JST 变量中 但是 当我尝试加载 jst
  • 如何将 sqlite3 模块导入 Python 2.4?

    sqlite3 模块包含在 Python 2 5 版本中 然而 我坚持使用 2 4 版本 我上传了 sqlite3 模块文件 并将目录添加到 sys path 但是当我尝试导入它时出现以下错误 Traceback most recent c
  • 可以在注册时指定多个 Autofac 生命周期范围吗?

    我将 Autofac IoC 容器与 MVC4 附加组件一起使用 该附加组件提供 InstancePerHttpRequest 生命周期范围 然而 在我的项目中 我有 web web api 和后台工作线程 在下面的示例中 我假设 Inst
  • 如何使用 codeigniter 获得 zend studio 自动完成功能

    我正在寻找一种好方法来获得在 Zend Studio for Eclipse 中工作的 codeigniter 中的库的自动完成和单击参考 无论叫什么 例如 如果我这样做 this gt load gt library dx auth th
  • Java中的多级映射[重复]

    这个问题在这里已经有答案了 Java 中将值 o 保留在如下树结构中的最佳方法是什么 obj1 obj2 obj3 obj4 obj5 obj6 obj7
  • C/cmake - 当 TARGET_LINK_LIBRARIES 中指定库时,如何向(未使用的)库添加链接器标志?

    在我的项目的根目录中 我有一个子目录my lib另一个用于my app 图书馆my lib定义填充链接器定义的节的表 这些表不直接由my app 所以这个库没有链接 为了强制链接 my lib 我添加了标志 whole archive 如下