2017-09-22 29 views
0

我正在使用cmake 3.9.1版。如何使用CMake爲導入的共享庫指定include目錄?

我的源代碼樹中有第三方共享庫和頭文件。我試圖將其添加爲鏈接目標。

所有我能找到的文件說,這應該工作:

test.cpp

#include "ftd2xx.h" 

int main(int argc, char **argv) 
{ 
    FT_HANDLE handle; 
    FT_STATUS status = FT_Open(1, &handle); 

    return 0; 
} 

CMakeLists.txt

cmake_minimum_required (VERSION 3.6) 
project(test_proj CXX) 
add_subdirectory(ftdi) 
add_executable(mytest test.cpp) 
target_link_libraries(mytest ftd2xx) 

ftdi/CMakeLists.txt

add_library(ftd2xx SHARED IMPORTED) 
set_target_properties(ftd2xx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}) 
set_target_properties(ftd2xx PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}) 

但是,編譯包含「ftd2xx.h」的test.cpp會抱怨它無法找到頭文件,並且在生成的makefile中缺少相關的-I<path>條目。

如果我指定庫爲INTERFACE而不是SHARED IMPORTED那麼頭文件找到正確,但CMake barfs設置爲IMPORTED_LOCATION屬性。

如果我指定庫爲INTERFACE而不是SHARED IMPORTED,然後使用target_link_libraries直接指向庫文件,而不適用於Windows,但不適用於Linux。

我會很感激任何人可以提供幫助。

回答

0

CMake的文檔並實際上回答這個問題,但如此簡潔,並以更大的段落的中間,這是很容易錯過:

The target name has scope in the directory in which it is created and below, but the GLOBAL option extends visibility. 

我在一個較高的使用目標名稱因此我需要將庫聲明爲SHARED IMPORTED GLOBAL而不僅僅是SHARED IMPORTED

最後的代碼是:

add_library(ftd2xx SHARED IMPORTED GLOBAL) 
set_target_properties(ftd2xx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}) 

然後爲Windows:

set_target_properties(ftd2xx PROPERTIES IMPORTED_IMPLIB ${CMAKE_CURRENT_SOURCE_DIR}/win32/ftd2xx.lib) 
    set_target_properties(ftd2xx PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/win32/ftd2xx.dll) 

;對於Linux:

set_target_properties(ftd2xx PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/i386/libftd2xx.so) 
相關問題