2014-11-23 63 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