2014-11-23 60 views
1

我正在嘗試爲德州儀器開發板創建一個find_package文件。這是代碼。創建一個CMake查找包

set(TIVAWARE_DIR $ENV{TIVAWARE}) 

if (NOT TIVAWARE_DIR) 
    message(STATUS "TIVAWARE_DIR not set") 
endif() 

message(STATUS "Found TivaWare at ${TIVAWARE_DIR}") 

find_path(TIVAWARE_INCLUDE_DIR 
    NAMES tm4c123gh6pm.h 
    HINTS ${TIVAWARE_DIR}/inc 
    DOC "The TivaWare include directory." 
) 
message(STATUS "==== ${TIVAWARE_INCLUDE_DIR}") 

find_library(TIVAWARE_LIBRARY_DIR 
    NAMES libdriver 
    HINTS ${TIVAWARE_DIR}/driverlib/gcc 
    DOC "The TivaWare driver library path." 
) 

include(FindPackageHandleStandardArgs) 
find_package_handle_standard_args(TIVAWARE DEFAULT_MSG TIVAWARE_INCLUDE_DIR TIVAWARE_LIBRARY_DIR) 

if(TIVAWARE_FOUNT) 
    set(TIVAWARE_LIBRARIES ${TIVAWARE_LIBRARY_DIR}) 
    set(TIVAWARE_INCLUDE_DIRS ${TIVAWARE_INCLUDE_DIR}) 
    set(TIVAWARE_DEFINITIONS) 
endif() 

mark_as_advanced(TIVAWARE_INCLUDE_DIR TIVAWARE_LIBRARY_DIR) 

環境變量是由該文件定義和找到的。但它無法找到包含和庫文件。這是我得到的輸出的一部分。

Cross-compiling with the gcc-arm-embedded toolchain 
Toolchain prefix: e:/armtm/armgcc/arm-none-eabi 
Eclipse version is set to 3.6 (Helios). Adjust CMAKE_ECLIPSE_VERSION if this is wrong. 
Found TivaWare at e:\armtm\swtm4c 
==== TIVAWARE_INCLUDE_DIR-NOTFOUND 

如果有人能幫我解決這個問題,我將不勝感激。

謝謝

回答

0

其實你真的不應該寫這些腳本。他們完全浪費時間。

您是否在德州儀器工作?如果你這樣做,有比這些Find * .cmake腳本更好的方法。

如果你不這樣做,只是做

set(TIVAWARE_INCLUDE_DIR "${TIVAWARE_DIR}/inc" CACHE PATH "") 

並取回完成工作。 :)

+0

感謝您的意見,這是做到這一點的一種方式。但是,如果我創建一個新項目,我將不得不添加所有這些** set **語句(不僅包括目錄 - 也有一些庫文件)。如果我有一個FindXXXX.cmake模塊,它的工作就完成了,我只需要調用find_package語句即可。 你能解釋爲什麼你說他們是一個浪費時間? – 2014-11-24 16:13:37

+0

如果您必須在Find * .cmake中調用'set'。我不喜歡這些腳本,因爲它不應該是庫用戶編寫這些腳本的工作。這是一個從頭開始打破的系統。但是,如果你必須這樣做,儘可能簡單。在你的腳本中,你爲'lib'和'inc'指定了一個可能的子目錄,那麼爲什麼還要調用'find_path',由於它們奇怪的'NO_DEFAULT_PATH'機制,它可能具有隨機行爲。 – 2014-11-24 17:11:18

+0

謝謝,編輯完腳本後我得到了相當多的腳本,但我也必須將它放在CMake模塊目錄中,我不喜歡它。我會接受你的回答。 – 2014-11-24 17:21:10