TL; DRCMake的添加庫子目錄
使用cmake,我怎麼能包含子目錄到庫中,使得它們可以包含不引用它們所在的目錄?
末TL; DR
在試圖簡明扼要,什麼和如何,我已刪除了所有的更高層次的想法,我認爲是不必要的細節說話英寸如有需要,我會進行編輯。因此,這是我的項目結構的簡要概要。
ParentDir
--src
----source.cpp
----source.h
----entities_dir
------entity.cpp
------entity.h
------CMakeLists.txt
----CMakeLists.txt
--CMakeLists.txt
--main.cpp
當前標準的,我必須在src目錄下的CMakeLists定義庫。因此,我可以通過#include包含src文件作爲#include「src/file.h」。我希望能夠對我的src子目錄中存在的頭文件做同樣的處理。
的CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(Project)
add_executable(Project ${SOURCE_FILES} main.cpp)
include_directories(src)
add_subdirectory(src)
target_link_libraries(Project Library) # Engine Libraries
的src /的CMakeLists.txt
file(GLOB SOURCE_FILES *.cpp)
file(GLOB HEADER_FILES *.h)
add_library(Library STATIC ${SOURCE_FILES} ${HEADER_FILES})
的main.cpp
#include <source.h> // this works
#include <entity.h> // this does not work but I want it to
#include <entities/entity.h> // this works but I don't want this
int main() {}
我ñ確信如何完全做到這一點。我已經嘗試過GLOB_RECURSE,add_subdirectory(實體)等。我也嘗試在src/entities/CMakeLists.txt中創建一個名爲Entities的庫,並將其與link_libraries鏈接起來。這些都沒有成功。什麼是正確的方法來實現這一點,因爲我認爲我可能接近完全錯誤。
在編譯器頭部搜索路徑中需要使用include_directories()調用實現的路徑。您可以將現有的include_directories(src)調用修改爲include_directories(src src/entities)。我沒有意識到這種遞歸方式,我也不推薦它。 – qexyn
這樣的作品。這似乎是在挑戰我對如何使用cmake的理解。我已經看到在每個目錄中都有cmakelists這是司空見慣的事情。因爲在這種情況下,src cmakelists正在創建實際的庫,不應該父cmake只需引用src cmake而不需要src子目錄的知識? – tramstheman
@qexyn如果你想留下一個答案,我會接受它。 – tramstheman