2015-09-29 31 views
-4

我正在使用cmake构建可执行文件以在英特尔伽利略主板上运行。包括cmakelists.txt文件中的外部库

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

Mraa library

  1. 当我请从GIT中的库(1),我需要建立其作为这里

Mraa compiling instructions

描述
  • 我需要在我的CMakeLists.txt文件中放置什么来提取图书馆?
  • 这是我到目前为止在我的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) 
    
    +0

    这里是你的解决方案看看这里 1)http://stackoverflow.com/questions/24570916/add-external-libraries-to-cmakelist-txt-c – BrotskyTv

    +0

    @riverrock:对于内部建立外部库你的项目,你可以使用[ExternalProject_Add](https://cmake.org/cmake/help/v3.0/module/ExternalProject.html)。如果你是CMake中的新手,并且使用这个功能对你来说并不清楚,我建议你在你的项目之外建立外部库,并使用它的完整路径与它连接。有许多资源描述了如何与外部库链接。 – Tsyvarev

    +0

    Hi @Tsyvarev,我使用这里提供的说明[链接](http://iotdk.intel.com/docs/master/mraa/building.html)在我的项目之外构建了mraa库。然后我将这两行包含在我的CMakeLists.txt文件中。 'include_directories(“$ {PROJECT_SOURCE_DIR}/mraa-master/include”)TARGET_LINK_LIBRARIES($ {APPLICATION_NAME} $ {CMAKE_SOURCE_DIR} /mraa-master/build/src/libmraa.so)。我得到的错误是** mraa-master/build/src/libmraa.so:无法读取符号:错误格式的文件** – riverrock

    回答

    -1

    为构建最简单的方法你的项目旁边有3D方项目是add_subdirectory()该子项目。以下方法意味着您(手动)将mraa项目的源(git clone)下载到项目源的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内部),则该子项目也将被交叉编译。