CMake如何正确创建目标之间的依赖关系

问题描述:

我想用CMake来设置C++项目和它使用的库之间的一些简单依赖关系。CMake如何正确创建目标之间的依赖关系

的设置如下:

  • 项目
    • 依赖

项目本身包含的源文件,其中包括从依附头和可执行文件时建造它需要与Dependency的静态库链接。

到目前为止,我可以得到这个工作,但我必须手动指定项目的CMakeLists文件中的依赖项的包含目录。我希望这会被自动拔出,并且我探索了使用find_package()命令来取得有限的成功并使事情变得更加复杂的选项。

我想要做的就是在项目之前建立依赖关系,并且具有针对库的项目链接并具有它的包含目录,是否有一种简单的简洁方式来实现此目的?

我目前cmake的文件:

项目,的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (Project) 
include_directories ("${PROJECT_SOURCE_DIR}/Project") 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 
add_dependencies(Project Dependency) 

依赖性的CMakeLists.txt

project(Dependency) 
add_library(Dependency SomethingToCompile.cpp) 
target_link_libraries(Dependency) 
+0

结帐:http://*.com/questions/10004134/cmake-add-dependency-not-in-subdirectory – 2016-01-07 10:48:28

这是不完全清楚自己想要做什么,和为什么Project和Depency必须分开构建。

我的第一个,虽然你的例子是

  1. 项目,的CMakeLists.txt

    • 删除add_dependencies(项目依赖) 没有必要指定依赖,target_link_libraries()已经这样做。
  2. 按照相关性,的CMakeLists.txt

    • 删除项目(依赖) 它建立一个图书馆,那么为什么要有自己的项目?
    • 删除target_link_libraries(依赖) ,因为它并没有
+6

回答你的问题。依赖项可能是作为git子模块包含的共享库的项目。共享库也可以在没有外部项目的情况下工作。 – Arne 2014-09-11 12:10:15

由于CMake 2.8.11可以使用target_include_directories。只需简单地在您的DEPENDENCY项目中添加此功能并填写您想要在主项目中查看的包含目录。 CMake会关心其余的。

PROJECT,CMakeLists。TXT:

cmake_minimum_required (VERSION 2.8.11) 
project (Project) 
include_directories (Project) 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 

依赖性的CMakeLists.txt

project (Dependency) 
add_library (Dependency SomethingToCompile.cpp) 
target_include_directories (Dependency PUBLIC include)