几周前,我们移植了代码库以使用 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(使用前将#替换为@)