我需要將ZIMPL包含在CMake項目中。在源代碼中的ZIMPL頭都包括這樣CMake:定義自定義包含路徑
#include zimpl/bool.h
內ZIMPL實際路徑是zimpl/src/bool.h
。我怎麼能告訴CMake(或C鏈接器)在zimpl/src/
中遇到包含zimpl/
? 爲避免平臺獨立性,我寧願避免創建符號鏈接。
我需要將ZIMPL包含在CMake項目中。在源代碼中的ZIMPL頭都包括這樣CMake:定義自定義包含路徑
#include zimpl/bool.h
內ZIMPL實際路徑是zimpl/src/bool.h
。我怎麼能告訴CMake(或C鏈接器)在zimpl/src/
中遇到包含zimpl/
? 爲避免平臺獨立性,我寧願避免創建符號鏈接。
不能使用#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)
您可以使用include_directories()
命令執行此操作。它的參數需要一個目錄列表。
是的,我知道。但由於C源代碼中的include命令需要特定的路徑「zimpl/bool.h」,所以它沒有找到,儘管CMake包含了相應的「src /」目錄。 – mattmilten
噢,你的意思是將'zimpl/bool.h'重新映射到'zimpl/src/bool.h'?你不能那樣做,因爲include路徑只是編譯器搜索的根目錄。所以如果root是'zimpl/src /',你必須將它包含爲'
「複製」問題是問如何寫劇本的CMake如果文件層次**已經**需要相對路徑。給定問題*明確地說*在'#include ** **中的相對路徑與文件層次結構中的相對路徑不同**。投票重新開放。 – Tsyvarev