【发布时间】:2015-09-29 13:24:44
【问题描述】:
我正在使用 cmake 构建可执行文件以在英特尔 Galileo 板上运行。
我的问题是如何在构建过程中包含外部 mraa 库。
- 当我从 git (1) 下载库时,是否需要按照此处所述构建它
- 我需要在我的 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)
【问题讨论】:
-
这是您的解决方案,请在此处查看 1) stackoverflow.com/questions/24570916/…
-
@riverrock:要在您的项目中构建外部库,您可以使用ExternalProject_Add。如果您是 CMake 新手并且不清楚如何使用此功能,我建议您在项目之外构建外部库,并使用其完整路径链接。有很多资源描述了如何与外部库链接。
-
嗨@Tsyvarev,我使用此处link 提供的说明在我的项目之外构建了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: could not read symbols: File in wrong format -
如果你交叉编译你的项目,那么你也应该交叉编译
mraalibrary。 -
@Tsyvarev mraa 库是一个支持 cmake 的库。如何将它包含在启用 cmake 的项目中,以便它与其余代码交叉编译?谢谢