CMake+Xcode:应用程序存档失败,具体取决于同一解决方案中的库。在 BUILD_TREE 而不是 Xcode/DerivedData 中构建 Archive?

2024-04-17

几周前,我们移植了代码库以使用 CMake 进行构建管理。我们现在意识到,当我们试图做到这一点时,存在一个重大问题Archive依赖于同一 Xcode 解决方案中构建的一个(或多个)库的应用程序。

链接器失败,因为它找不到所依赖的库(并且该库确实不存在于它正在查找的位置)。

最小的例子

这是产生该问题的一个最小示例:

在 CMakeLists.txt 中

##
## The library
##
project(library)

add_library(${PROJECT_NAME}
    utils.h
    utils.cpp
)


##
## The application
##
project(CocoaApp)

set(${PROJECT_NAME}_XIB
    MainMenu.xib
)

add_executable(${PROJECT_NAME} MACOSX_BUNDLE
    AppDelegate.h
    AppDelegate.mm
    ${${PROJECT_NAME}_XIB}
    main.mm
)


target_link_libraries(${PROJECT_NAME} library "-framework Cocoa")

set_target_properties(${PROJECT_NAME} PROPERTIES
                      RESOURCE "${${PROJECT_NAME}_XIB}")

当从这个简单的 CMake 脚本生成 Xcode 项目时,如果尝试调用Archive命令,编译阶段本身运行良好,但链接器阶段失败并出现以下错误:

clang: error: no such file or directory: '<path_to_build_tree>/Release/libLibrary.a'

并且在${build_tree}/Release/中确实找不到libLibrary.a。 (如果库目标是在 Release 中首次编译的,则该文件已经存在,但它不可行,因为Archive应该是独立的。)

这是一个错误吗?有解决方法吗?

编辑:在库上设置 ARCHIVE_OUTPUT_DIRECTORY

If ARCHIVE_OUTPUT_DIRECTORY设置为Librarytarget,那么确实在 CMake 的 build_tree 中创建了一个文件。实际上将其值设置为“./”甚至将其放置在“正常”发布版本将放置库的位置。

这里的问题是,放置在 build_tree 中的文件仅仅是到实际库的软链接(在 ~/Library/Developer/Xcode/DerivedData/.../.../libLibrary.a 中)。相反,我们需要“存档”操作在此处构建实际文件,就像发布构建一样(或者至少在完成后将其移动到那里)。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake+Xcode:应用程序存档失败,具体取决于同一解决方案中的库。在 BUILD_TREE 而不是 Xcode/DerivedData 中构建 Archive? 的相关文章

随机推荐

  • SQL中的条件外键

    我有一张名为 PartyChannel 的表 其中包含以下列 ID ChannelID ChannelType ChannelID stores MailID or PhoneID or EmailID取决于ChannelType 那么我如
  • 为什么 SQLAlchemy/associationproxy 重复我的标签?

    我正在尝试在与标签非常相似的情况下使用关联代理文档中的示例 http www sqlalchemy org docs 05 reference ext associationproxy html 这是我的架构的一个子集 它是一个博客 使用声
  • Websocket、Angular 2 和 JSON Web 令牌身份验证

    我的 Angular 2 应用程序 用打字稿编码 有一个简单的身份验证方案 用户登录 服务器返回 JSON Web 令牌 JWT abc123 在每次 API 调用时 应用程序都会将 JWT 发送到Authorization header
  • 将 SELECT DISTINCT ON 查询从 Postgresql 转换为 MySQL

    我一直在使用PostgreSQL现在迁移到MySQL 在我的查询中 我正在使用PostgreSQL s SELECT DISTINCT ON col1 col2 col3 我想知道这句话是否有对应的内容MySQL 没有完全等效的方法可以将使
  • C++ sizeof C 风格字符串/字符数组 - 优化

    我是一名大学学生 我主要使用 Java 工作 C 对我来说很陌生 所以我可能会犯很多愚蠢的错误 而且我还有即将到来的考试要应对 别对我太严厉 注意 我不能使用 C std string 因为由于大学任务我需要使用 C 字符串 参考我的研究和
  • java webapp配置策略

    我的网络应用程序的一部分涉及上传图像文件 在生产服务器上 文件需要写入 somepath on Production server images 对于本地开发 我想将文件写入 some different path images 处理这些配
  • 如何在 powershell 中转义大括号 {...}?

    我需要生成多行 xml 标记 其中包含 GUID
  • 如何在 jQuery 中检测复选框点击

    我无法检测到从下面的脚本中单击了何时以及哪个复选框 HTML 片段
  • 给定焦点和相机主中心,如何创建透视投影矩阵

    我设法使用 OpenCV 获取相机的内在和外在参数 因此我有 fx fy cx 和 cy 我还有屏幕 图像的宽度和高度 但是如何根据这些参数创建 OpenGL 透视投影矩阵呢 glFrustum 展示了如何在给定 Z 近 Z 远以及图像宽度
  • R fromJSON 无法打开连接

    我正在使用一种算法 R 它调用一个 Web 服务 该服务对数据库进行查询并返回一个 JSON 对象 url lt paste https example com id 1 document lt fromJSON content url m
  • 在 Apache Zeppelin 上运行 Pig 查询

    我正在 Apache Zeppelin 中运行以下 Pig 查询 pig query A load Pig data using PigStorage as ExamName ExamId BITSID StudentName Issue
  • 从函数中打开 fancybox

    我正在尝试从我拥有的函数中打开一个 fancybox 简而言之 我的 HTML 代码如下所示 a href modalMine click a 我的功能的一部分如下所示 function myfunction me me fancybox
  • 针对 unsafePerformIO 的部门限制

    工作中有人讨论过将其作为一项全部门政策 禁止使用unsafePerformIO及其同类 就我个人而言 我并不介意 因为我一直认为 如果我发现自己想要使用它 通常意味着我需要重新考虑我的方法 这个限制听起来合理吗 我似乎记得在某处读到它主要是
  • iOS:如何打开带有动画效果的相机?

    我想以动画效果打开相机 以便看起来相机仅在父屏幕中打开 我正在使用相机覆盖屏幕 在父屏幕中单击按钮事件时 相机覆盖屏幕正在打开 在相机覆盖屏幕中有一个取消按钮可以关闭相机 因此在再次关闭相机时我需要显示动画效果看起来现在相机在同一个父屏幕中
  • Python 类中的属性初始化/声明:将它们放在哪里?

    我想知道在 Python 中初始化对象属性的最佳实践是什么 在类的主体中还是在 init 功能 i e class A object foo None vs class A object def init self self foo Non
  • 在 postgresql 中生成自动 ID

    用户表 ID Name 1 usr1 2 usr2 3 usr3 上表中 ID为主键 我的要求是在将数据插入表中时 我只想指定 名字像INSERT INTO user VALUES usr4 执行查询后 有没有办法自动为 usr4 创建ID
  • ACRA 行号不正确

    我使用 android proguard ACRA 谁能告诉我为什么我收到的崩溃报告的行号不正确 行号显然指向错误的陈述 我无法知道崩溃的确切行号 因此无法修复用户报告的错误 这真的很烦人 谢谢 PS 我使用的是我发布的版本对应的映射文件
  • 如何设置 QBrush 的颜色动画

    我想要动画颜色QBrush 更多详情请看下面的代码 这是我的 h 文件 class Cell public QObject public QGraphicsRectItem Q OBJECT Q PROPERTY QBrush brush
  • Jquery 动态更改链接扩展名

    我在很多页面都设置了链接 例如 ul li a href someurl somefile html Some file a li li a href someurl somefile1 html Some file1 a li li a
  • CMake+Xcode:应用程序存档失败,具体取决于同一解决方案中的库。在 BUILD_TREE 而不是 Xcode/DerivedData 中构建 Archive?

    几周前 我们移植了代码库以使用 CMake 进行构建管理 我们现在意识到 当我们试图做到这一点时 存在一个重大问题Archive依赖于同一 Xcode 解决方案中构建的一个 或多个 库的应用程序 链接器失败 因为它找不到所依赖的库 并且该库