假设有以下目录结构:
root
|
+--projects
| |
| +-test
| |
| +-CMakeFiles.txt
|
+--libs
|
+-testlib
|
+-CMakeFiles.txt
Run Code Online (Sandbox Code Playgroud)
test包含CMakeFiles.txt并testlib包含CMakeFiles.txt."test"生成可执行文件,"testlib"生成静态库.
我希望"test"与"testlib"链接,而不使用符号链接,也不需要将"testlib"库移动到"test"中的子目录中.
因为"testlib"不是"test"的子目录,所以我不能这样做
add_subdirectory("../../libs/testlib")
Run Code Online (Sandbox Code Playgroud)
在测试中CMakeFiles.txt- CMake会抱怨"testlib"不在"test"子目录中.
另外,因为系统有几个不同的编译器,我不能简单地将"testlib"库安装到某种中心目录中,所以我想test编译一个本地副本testlib并与之链接(即好像testlib是一个子目录).我还希望"test"项目能够自动重建"testlib"(如果已经更改).
那么,我该如何处理呢?我在Windows XP SP3上使用CMake 2.8.4.
我有几个项目(所有建筑都使用来自相同源树结构的CMake)都使用他们自己的混合数十个支持库.
所以我想到了如何在CMake中正确设置这个问题.到目前为止,我只发现CMake如何正确地创建目标之间的依赖关系,但我仍然在设置所有具有全局依赖关系(项目级别确实知道所有)或本地依赖关系(每个子级别目标仅处理其自己的依赖).
这里是我的目录结构的简化例子,我现在想出了使用CMake和本地依赖性(例子中只有一个可执行的项目,App1但也有更多的实际,App2,App3等):
Lib
+-- LibA
+-- Inc
+-- a.h
+-- Src
+-- a.cc
+-- CMakeLists.txt
+-- LibB
+-- Inc
+-- b.h
+-- Src
+-- b.cc
+-- CMakeLists.txt
+-- LibC
+-- Inc
+-- c.h
+-- Src
+-- c.cc
+-- CMakeLists.txt
App1
+-- Src
+-- main.cc
+-- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
LIB /力霸/的CMakeLists.txt
include_directories(Inc ../LibC/Inc)
add_subdirectory(../LibC LibC)
add_library(LibA Src/a.cc Inc/a.h)
target_link_libraries(LibA LibC)
Run Code Online (Sandbox Code Playgroud)
LIB/LibB /的CMakeLists.txt
include_directories(Inc)
add_library(LibB Src/b.cc Inc/b.h)
Run Code Online (Sandbox Code Playgroud)
LIB /的LibC /的CMakeLists.txt
include_directories(Inc ../LibB/Inc)
add_subdirectory(../LibB LibB)
add_library(LibC …Run Code Online (Sandbox Code Playgroud)