2016-01-25 245 views
3

我需要將ZIMPL包含在CMake項目中。在源代碼中的ZIMPL頭都包括這樣CMake:定義自定義包含路徑

#include zimpl/bool.h 

內ZIMPL實際路徑是zimpl/src/bool.h。我怎麼能告訴CMake(或C鏈接器)在zimpl/src/中遇到包含zimpl/? 爲避免平臺獨立性,我寧願避免創建符號鏈接。

+0

「複製」問題是問如何寫劇本的CMake如果文件層次**已經**需要相對路徑。給定問題*明確地說*在'#include ** **中的相對路徑與文件層次結構中的相對路徑不同**。投票重新開放。 – Tsyvarev

回答

1

不能使用#include文件使用與實際文件不同的相對路徑。

簡單的方法處理您的情況是將原始標題複製到需要路徑後綴的位置。它可以通過CMake通過file(COPY)configure_file(.. COPY_ONLY)來完成:

file(COPY <source_include_dir>/zimpl/src/bool.h 
    DESTINATION ${CMAKE_BINARY_DIR}/include/zimple/ 
) 
include_directories(${CMAKE_BINARY_DIR}/include) 
0

您可以使用include_directories()命令執行此操作。它的參數需要一個目錄列表。

+0

是的,我知道。但由於C源代碼中的include命令需要特定的路徑「zimpl/bool.h」,所以它沒有找到,儘管CMake包含了相應的「src /」目錄。 – mattmilten

+0

噢,你的意思是將'zimpl/bool.h'重新映射到'zimpl/src/bool.h'?你不能那樣做,因爲include路徑只是編譯器搜索的根目錄。所以如果root是'zimpl/src /',你必須將它包含爲''。我建議改爲製作一個單獨的「include/zimpl」目錄。 –