使用Xcode 6.3.1,CMake 3.2.2
我有一个与图书馆链接的项目。该库作为代码包含在xcode项目中,编译后与主可执行文件链接。
使用cmake生成项目。 CMakeLists.txt的一些摘录:
add_library(mylib ${mylib_HEADERS} pch.cpp source/mylib/xxx.cpp)
...
add_executable(${MAIN_BINARY_NAME} MACOSX_BUNDLE ${MAIN_HEADERS} ${MAIN_CODE_FILES} ${MAIN_ICON_FILES} ${MAIN_DYLIBS} )
target_link_libraries (${MAIN_BINARY_NAME} mylib)
在生成我的xcodeproj之后,我构建了一个正常版本(cmd + B),它可以编译和链接(并运行)而不会出现问题。当我尝试归档时,它在链接器错误上失败。
使用命令行xcodebuild我比较了两个版本,一些摘录:
发布版本
Libtool /Users/username/dev/MyProject/cmake-master/libs/mylib/RelWithDebInfo/libmylib.a normal x86_64
archive-build
Libtool /Users/username/Library/Developer/Xcode/DerivedData/MyProject-facomnlcdbuduqeohionewjyectq/ArchiveIntermediates/MyProject/IntermediateBuildFilesPath/UninstalledProducts/libmylib.a normal x86_64
...
Ld /Users/username/Library/Developer/Xcode/DerivedData/MyProject-facomnlcdbuduqeohionewjyectq/ArchiveIntermediates/MyProject/InstallationBuildProductsLocation/Applications/MyProject.app/Contents/MacOS/MyProject normal x86_64
...
clang: error: no such file or directory: '/Users/username/dev/myproject/cmake-master/libs/mylib/RelWithDebInfo/libmylib.a'
因此,对于发布版本,它正确使用cmake指定的构建路径。对于存档构建,它忽略构建路径,而是编译并将结果库放在default-intermediate-folder中 - 但是当它与exe链接时,它再次查看cmake指定的构建路径,然后无法找到图书馆。
它看起来像是xcode中的一个错误,因为cmake会覆盖构建路径......?
答案 0 :(得分:5)
同时我发现了一个解决方法,所以至少它Archives没有链接器错误。在cmakelists.txt中指定“每个配置构建路径”,如下所示:
set_target_properties(mylib PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library)
归档文件将编译库 - 稍后在链接时找到它