包括cmakelists.txt文件中的外部库

时间:2015-09-29 13:24:44

标签: c++ cmake

我正在使用cmake构建一个可在英特尔Galileo主板上运行的可执行文件。

我的问题是如何在构建过程中包含外部mraa库。

Mraa library

  1. 当我从git(1)下载库时,我是否需要按照此处的描述构建它
  2. Mraa compiling instructions

    1. 我需要在CMakeLists.txt文件中放入什么来获取图书馆?
    2. 这是我目前在CMakeLists.txt文件中的内容,但我认为这是不正确的。

      ### MRAA ###
      add_subdirectory(mraa-master/src)
      file(GLOB mraa_SRC
          "mraa-master/src/*.c"
      )
      
      include_directories( "${PROJECT_SOURCE_DIR}/mraa-master/include"  )
      add_library( ${MRAA_LIBRARY_NAME} SHARED  ${mraa_SRC}  )
      

      谢谢

      cmake_minimum_required(VERSION 2.8)
      
      MESSAGE( STATUS "Starting build process")
      
      SET( CMAKE_VERBOSE_MAKEFILE on )
      
      if (CMAKE_BUILD_TYPE EQUAL "Debug")
      MESSAGE(STATUS "Building in debug mode")
      elseif (CMAKE_BUILD_TYPE EQUAL "Release")
      MESSAGE(STATUS "Building in release mode")
      endif()
      
      SET(PROJECT_NAME "TestProject")
      SET(APPLICATION_NAME "TestApplication")
      SET(SAFE_STRING_LIBRARY "SafeString")
      SET(APPLICATION_LIBRARY "Applibrary")
      
      PROJECT( ${PROJECT_NAME} )
      
      MESSAGE( STATUS "PROJECT: " ${PROJECT_NAME} )
      
      
      SET(WRSDK_PATH "$ENV{WINDRIVER_SDK_DIR}")
      IF (WRSDK_PATH)
      else()
      SET(WRSDK_PATH /opt/windriver/wrlinux/5.0-intel-quark/)
      endif()
      
      SET(APPLIBRARY_NAME  ${APPLICATION_LIBRARY} )
      SET(SAFE_STRING_LIBRARY_NAME ${SAFE_STRING_LIBRARY} )
      
      ### SAFE STRING ###
      add_subdirectory(SafeStringStaticLibrary/safeclib) 
      file(GLOB safestring_SRC
      "SafeStringStaticLibrary/safeclib/*.c" 
      )
      
      include_directories( "${PROJECT_SOURCE_DIR}/SafeStringStaticLibrary /safeclib"  ) 
      add_library( ${SAFE_STRING_LIBRARY_NAME} SHARED  ${safestring_SRC}  ) 
      
      include(ExternalProject)
      ExternalProject_Add(mraa
          GIT_REPOSITORY https://github.com/intel-iot-devkit/mraa.git
          GIT_TAG        v0.8.0
          UPDATE_COMMAND ""
          INSTALL_COMMAND "" )
      
      
      file(GLOB app_SRC
      "classes/*.cpp"
      "Logger.cpp"
      "sqlite3.c"
      "shell.c"
      )
      
      add_library( ${APPLIBRARY_NAME} SHARED ${app_SRC})
      include_directories(  "${CMAKE_SOURCE_DIR}"     "${CMAKE_SOURCE_DIR}/SafeStringStaticLibrary/include" )
      
      add_executable( ${APPLICATION_NAME} ${APPLICATION_NAME}.cpp
      
      include_directories(  "${CMAKE_SOURCE_DIR}"   "${CMAKE_SOURCE_DIR}/SafeStringStaticLibrary/include"  "${CMAKE_SOURCE_DIR}/classes")
      
      TARGET_LINK_LIBRARIES(  ${APPLICATION_NAME}  ${APPLIBRARY_NAME} ${SAFE_STRING_LIBRARY_NAME} -lrt -lpthread -lgcov -ldl)
      

1 个答案:

答案 0 :(得分:-1)

与3d party项目一起构建项目的最简单方法是add_subdirectory()子项目。以下方法意味着您(手动)将(git clone)项目的源(mraa)下载到项目来源的mraa-lib子目录中。

<强>的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

MESSAGE( STATUS "Starting build process")

# Configure subproject before definition of variables for main project.
#
# Subproject defines *mraa* library target.
add_subdirectory(mraa-lib)

# Before installation, public mraa headers are contained under *api* subdirectory.
include_directories(mraa-lib/api)

... # create executable ${APPLICATION_NAME}

# Linking with mraa library is straightforward.
target_link_libraries(${APPLICATION_NAME} mraa)

这样,mraa子项目将与您的项目一起配置,构建和安装。因此,如果您交叉编译项目(使用工具链文件或IDE内部),子项目也将进行交叉编译。