我有一组文件想制作成一个库,然后在另一个项目中使用该库。这是现在的样子
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
SET(CMAKE_CXX_FLAGS "-std=c++11 -fopenmp -fPIC")
add_library (helperlibs lib1.cpp lib2.cpp lib3.cpp lib4.cpp )
INSTALL(TARGETS helperlibs
DESTINATION "${HOME}/lib"
)
INSTALL(FILES lib1.h lib2.h lib3.h lib4.h helperheader.h
DESTINATION "${HOME}/include/helperlibs"
)
在这段代码中,Lib4
依赖于 Lib1-3
而 Lib3
依赖于 Lib1-2
和 Lib2
依赖于 Lib1
。这些 cpp 文件中的每一个还依赖于包含一些定义和结构的 helperheader.h
文件。
在我的项目中,我有以下 CMake 文件
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
SET( CMAKE_CXX_FLAGS "-std=c++11 -fopenmp -fPIC")
SET(MYINCS ${HOME}/include/helperlibs)
SET(MYLIBDIR ${HOME}/lib)
SET(MYLIBS ${MYLIBDIR}/libhelperlibs.a )
include_directories(${MYINCS})
add_executable(main main.cpp)
target_link_libraries(main ${MYLIBS})
所以我想知道如果您想创建一个静态库并使用 cmake 从另一个项目链接到您应该这样写吗?
最佳答案
将搜索路径作为属性嵌入到库目标中并创建导出。 这样,同一构建树中的可执行文件将找到库及其包含文件,而无需指定路径(它们变得隐式)。
在我明白它应该如何工作之前,我需要仔细阅读 cmake 文档几次。
http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html#creating-packages http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
实例摘录:
add_library(trustportal-util ${CMAKE_CURRENT_LIST_FILE} ${_source_files} ${_disabled_source_files} )
target_link_libraries(trustportal-util ${Boost_LIBRARIES})
if(APPLE)
find_library(SECURITY_FRAMEWORK Security)
target_link_libraries(trustportal-util ${SECURITY_FRAMEWORK})
else()
find_library(LIB_SSL ssl)
find_library(LIB_CRYPTO crypto)
target_link_libraries(trustportal-util ${LIB_SSL} ${LIB_CRYPTO})
endif()
target_compile_definitions(trustportal-util PUBLIC BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
target_include_directories(trustportal-util PUBLIC ${Boost_INCLUDE_DIRS})
target_include_directories(trustportal-util PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_include_directories(trustportal-util SYSTEM PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
install(TARGETS trustportal-util
EXPORT trustportal-utilExport
DESTINATION lib
INCLUDES DESTINATION include
)
INSTALL(EXPORT trustportal-utilExport DESTINATION lib)
关于c++ - 使用 CMake 创建库、安装它并链接到另一个项目的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356493/