CMake + Xcode构建可执行文件但不构建dylib

时间:2014-10-21 19:31:13

标签: xcode cmake

我有一个CMake C ++项目,它指定了可执行文件和库目标:

...
add_library(my_lib SHARED ${MY_MAIN_SOURCES})   
target_link_libraries(my_lib ${MY_MAIN_LIBS})

add_executable(all_tests util/test/run.cc ${MY_TEST_FILES} ${MY_MAIN_SOURCES}) 
target_link_libraries(all_tests ${MY_MAIN_LIBS})

如果我使用Clang构建,一切正常,我同时获得'all_tests'可执行文件和'my_lib.dylib'库:

mkdir build
cd build
cmake ../..
make

但是,如果我使用Xcode构建,我只会获得'all_tests'并且我的库不存在。

mkdir build
cd build
cmake -G Xcode ../..
xcodebuild

当我检查生成的Xcode项目时,我发现失败的库目标正确地列出了项目其余部分的依赖关系,但它的构建阶段列表中没有链接步骤。但是,工作可执行目标也是类似的,因为它列出了依赖项和编译步骤但没有链接步骤。这对于生成的项目是否有所预期?

我是否需要在CMake文件中使用Xcode构建动态库? (FWIW,在Windows上构建相同的项目可以生成两种目标。)

(注意,我使用的版本是CMake 3.0.2和Xcode 6.0.1;这些兼容吗?我在OS X 10.9.5 Mavericks上做了所有这些。)

1 个答案:

答案 0 :(得分:1)

问题似乎是我试图从其他库中编译一个综合库。我原来的问题(实际上对我来说)不清楚,因为结果是CMake文件中的MY_MAIN_SOURCESMY_MAIN_LIBS都引用了项目中的其他库;只有MY_TEST_FILES引用了实际的源代码。

所以为了解决这个问题,我添加了一个虚拟文件:

 // Dummy.cc
 // namespace {
 // const int dummy = 0;
 // }

并将其包含在我的构建中:

add_library(my_lib SHARED ${MY_MAIN_SOURCES} Dummy.cc)   
target_link_libraries(my_lib ${MY_MAIN_LIBS})

通过此更改,生成的Xcode项目可以正确输出可执行文件库和综合库。