2016-10-24 116 views
4

這可能是一個虛擬的問題,但我從字面上看谷歌的兩個第一頁沒有成功。
我正在寫頭文件庫,而且我無法正確設置CMake配置,以便在構建解決方案時給出main.cpp找到合適的包含。
這怎麼能完成?CMake如何在沒有源代碼的情況下包含頭文件?

編輯

所以我也許應該給一點更詳細的解釋。
可以說我有一個./src文件夾:./src/core./src/wrappers。每個文件夾裏我必須要包含在main.cpp文件.h文件需要:

#include <src/core/reader.h> 

不過,當我把在CMakeList.txt類似:

include_directories(src/core) 
add_executable(main main.cpp) 

我收到這樣的消息:src/core/reader.h沒有這樣的文件或目錄。

回答

1

只需添加一個include_directories()指令,即可找到目標項目只能找到標題頭庫的位置。


根據您的編輯。爲了找到

#include <src/core/reader.h> 

您需要添加

include_directories(/full_parent_path_of_src) 
0

如果我正確理解你的問題,然後在你的CMakeLists.txt您需要添加include_directories(<DIRECTORY>)爲你的頭庫的每一個目錄。

4

爲了能夠使用該路徑,您應該參考src的父目錄。
假設頂層CMakeLists.txt是在src相同的水平,則可以改爲使用:

include_directories(${CMAKE_SOURCE_DIR}) 

正如從CMAKE_SOURCE_DIR文檔:

到源的頂層路徑樹。

如果src是直接在頂級目錄,這應該讓你使用這樣的:

#include <src/whatever/you/want.h> 

也就是說,一對夫婦的建議:

  • 我寧願補充一點:

    include_directories(${CMAKE_SOURCE_DIR}/src) 
    

    ,並使用此:

    #include <whatever/you/want.h> 
    

    不再在你的路src和限制搜索區域。

  • 我可能會使用target_include_directories代替include_directories並指定目標用於該規則:

    target_include_directories(main ${CMAKE_SOURCE_DIR}/src) 
    

    這必須在add_executable後放,否則目標是不可見的。

+0

@Jairo好吧,隨時投票或接受答案,如果它的作品。 ;-) – skypjack

0

這可能是有意義的在某些情況下,另一種選擇是創建一個專用目標的唯一頭庫:

add_library(headerlib INTERFACE) 
target_include_directories(headerlib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) 

然後使用它:

target_link_libraries(mytarget headerlib) 

這有一個好處,如果你想在多個目標中使用它,這很容易。

相關問題