2011-02-05 301 views
24

我想用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://stackoverflow.com/questions/10004134/cmake-add-dependency-not-in-subdirectory – 2016-01-07 10:48:28

回答

1

這是不完全清楚自己想要做什麼,和爲什麼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

16

由於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)