构建使用CMake和Xcode添加外部项目的库
我正在尝试使用CMake构建一个库(它反过来链接到通过CMake构建的其他库)。我在这个过程中遇到了一些问题,希望能得到一些指导 对于库,我有一个CMakeLists.txt,它基本上构建使用CMake和Xcode添加外部项目的库,xcode,cmake,Xcode,Cmake,我正在尝试使用CMake构建一个库(它反过来链接到通过CMake构建的其他库)。我在这个过程中遇到了一些问题,希望能得到一些指导 对于库,我有一个CMakeLists.txt,它基本上 set(SRC srcfile1.cpp srcfile2.cpp) set(HEADERS srcfile1.h srcfile2.h) add_library(myLib ${SRC} ${HEADERS}) INSTALL(FILES ${HEADERS} DESTINATION “include/myL
set(SRC srcfile1.cpp srcfile2.cpp)
set(HEADERS srcfile1.h srcfile2.h)
add_library(myLib ${SRC} ${HEADERS})
INSTALL(FILES ${HEADERS} DESTINATION “include/myLib”)
对于“Unix Makefiles”生成器,使用cmake命令
cmake -DCMAKE_INSTALL_PREFIX=. -DCMAKE_BUILD_TYPE=debug -G “Unix Makefiles” ..
我在build/src中获得了一个合适的调试库libMyLib.a。对于发布版本类型,libMyLib.a的发布版本放在build/src中
但是,对于Xcode生成器,该库位于src/Debug中。我在这里面临的问题是
a。在Xcode中进行归档似乎没有任何效果。我没有看到在任何地方创建相应的发布库
b。我还有一个myLibTests目标(使用Google gtest),它在CMakeLists.txt中定义为
set(SRC myTest.cpp)
add_executable(myLibTests ${SRC})
add_dependencies(myLibTests myLib gtest)
set(gTestLib External/src/gTestLib)
target_link_libraries(myLibTests myLib gTestLib)
当cmake生成器为“Unix Makefiles”时,myLibTests将生成链接并正常运行。gTestLib放在External/src/gtest build/中。但是,当它是“Xcode”时,它找不到gTest库。因为,库根据具体情况放置在External/src/gTestLib/Debug(或Release)中(并且在CMakeLists.txt中设置的上述路径不再有效)。我不知道如何在上面的set语句中适当地设置它的路径
因为调试/发布是在Xcode中控制的(CMake中的配置过程不知道这一点),我假设没有办法分离gTestLib的发行版/调试版,也没有办法让CMake configure Xcode在构建myLib时选择合适的版本,也就是说,如果我对myLib进行调试版,它也会对gTest进行调试版并链接到它(类似于发行版)?或者,是否可以将Xcode配置为将调试版本和发布版本放在同一位置(然后硬编码上面的路径)?配置此项的最佳方式是什么
谢谢。您可以将整个gtest项目添加到代码中,只需执行
add_子目录(“第三方/gtest”)
即可。在这种情况下,您可以将gtest
用作“本地”库。例如,像您自己的目标:target\u link\u库(myLibTests myLib gtest)
。2.首先安装gtest(Release/Debug或两者都安装),然后使用find_-package(gtest)
命令来定位libs。谢谢Ruslo。我采取了不同的方法。我现在为调试/发布维护不同的文件夹。在CMakeLists.txt中,我检查生成器是否为XCode,构建类型是否为release。如果是这样,我将CMAKE_配置_类型设置为Release。这使得CMake生成的XCode项目默认为针对其所有构建发布。因为我知道它现在正在CMake期间进行发布/调试构建,所以我可以正确设置库的路径