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

问题描述 投票:30回答:2

我试图使用CMake在C ++项目和它使用的库之间建立一些简单的依赖关系。

设置如下

  • 项目 依赖

项目本身包含源文件,其中包含来自Dependency的标头,并且在构建可执行文件时,它需要与Dependency的静态库链接。

到目前为止,我可以使这个工作,但我必须在Dependency文件中为CMakeLists.txt手动指定Project的包含目录。我希望自动将其拉出来,并且我已经探索了使用find_package()命令的选项,这样做的成功有限并使事情变得更加复杂。

我想做的就是在Dependency之前建立Project并且有Project链接到库并且有它的include目录。有一个简单的方法来实现这一目标吗?

我目前的CMake文件:

Project,档案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)

Dependency,档案CMakeLists.txt

project(Dependency)
add_library(Dependency SomethingToCompile.cpp)
target_link_libraries(Dependency)
c++ build cmake
2个回答
21
投票

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)

0
投票

目前还不清楚你想做什么,以及为什么必须单独构建Project和Dependency。

我的第一个就是你的例子

  1. 在PROJECT中,CMakeLists.txt 删除add_dependencies(项目依赖项)不需要指定依赖项,target_link_libraries()已经这样做了。
  2. 在DEPENDENCY中,CMakeLists.txt 删除项目(依赖项)它构建一个库,那么为什么要拥有自己的项目呢? 删除target_link_libraries(依赖关系)因为它什么都不做
© www.soinside.com 2019 - 2024. All rights reserved.