在CMake中,大多數第三方庫不需要我指定他們的包含目錄......他們似乎在幕後爲我處理這些問題。但是,一些第三方庫似乎把這項工作放在了我的盤子上。使用CMake,爲什麼一些第三方庫會自動讓你看到他們的包含目錄,而其他人不知道?
我在第三方庫中發現的差異是否表明我做錯了什麼?或者,CMake只是一個結構性較差的環境,某些第三方圖書館將比其他圖書館更緊握你的手?這裏發生了什麼?最佳實踐?
我將舉幾個例子。 OpenCV的做的事情非常簡單,不用我說它們包括目錄:
set(OpenCV_DIR ${THIRD_PARTY_DIR}/OpenCV)
find_package(OpenCV REQUIRED)
...
add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
然而,谷歌的協議緩衝要求我使用include_directories命令,以利用他們的頭文件:
set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PROTOBUF_DIR})
find_package(Protobuf ${THIRD_PARTY_DIR}/protobuf-2.6.1)
...
include_directories(${PROTOBUF_INCLUDE_DIRS})
add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})
可能在第一種情況下,OpenCV作爲系統範圍的軟件包安裝在您的系統中,因此可以在標準路徑中找到標題。嘗試卸載一段時間並再次測試。讓我知道,如果是這樣,我會在評論中回答。 ;-) – skypjack
感謝您的回覆@skypjack,但我正在使用的OpenCV和其他第三方庫並未安裝在系統級別上。我從源代碼構建了第三方(或者下載了預構建的二進制文件),並將他們的二進制文件/頭文件放在我的基準線的ThirdParty文件夾中。沒有安裝。 –