创建用于使用库的 cmake 模块
Creation of a cmake module for using a library
>我是C++新手,刚刚开始使用Cmake将库链接到我的项目。我需要使用库:
https://github.com/Gnimuc/FastPD
幸运的是,我设法使用 Cmake 构建了库(在我的构建中根本没有 *.lib 文件(,但我不知道如何将其链接到我的项目。我的意思是我不知道如何将其添加到我的 cmakelist 中.txt :
(附言。我还使用另外两个库 ITK 和 VTK;但我无法将上述库链接到我的项目或主.cpp。
################################################
cmake_minimum_required(VERSION 2.8)
project(My_project)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
if (ITKVtkGlue_LOADED)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
else()
find_package(ItkVtkGlue REQUIRED)
include(${ItkVtkGlue_USE_FILE})
set(Glue ItkVtkGlue)
endif()
add_executable(My_project MACOSX_BUNDLE main.cpp)
target_link_libraries(My_project
${Glue} ${VTK_LIBRARIES} ${ITK_LIBRARIES})
################################################
提前感谢您的帮助,
假设您安装了库及其头文件,则可以使用 find_path 搜索头文件,并将找到的路径添加到包含目录。然后,您可以使用find_library搜索库,并使用target_link_libraries
命令添加库。
我尝试了共享和静态类型来创建库。在共享的情况下,没有创建 *.lib 文件,而在静态的情况下,我的项目无法链接到库。因此,在我的项目的CmakeLists.txt中,我决定将所有*.cpp和标头添加为库,然后将它们链接在一起(因为我不知道它们之间的依赖关系!!(,最后,我将它们链接到我的项目。也许它没有意义,但它有效;希望对您有所帮助:
CmakeLists.txt
##############################################
cmake_minimum_required(VERSION 2.6)
set(PROJ_NAME PROJECT46)
PROJECT(${PROJ_NAME})
# Prevent compilation in-source
if( ${CMAKE_BINARY_DIR} STREQUAL ${PROJECT_SOURCE_DIR} )
Message( " " )
Message( FATAL_ERROR "Source and build directories are the same.
Create an empty build directory,
change into it and re-invoke cmake")
endif()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support.
Please use a different C++ compiler.")
endif()
##############################################
## External libraries
##############################################
list( APPEND CMAKE_MODULE_PATH
${PROJECT_SOURCE_DIR}/cmake
)
# Blitz
find_package( Blitz++ REQUIRED )
list( APPEND PROJ_INCLUDE_DIRS
${Blitz++_INCLUDE_DIR}
)
list( APPEND
PROJ_LIB
${Blitz++_LIBRARIES}
)
# ITK and VTK
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
if (ITKVtkGlue_LOADED)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
else()
find_package(ItkVtkGlue REQUIRED)
include(${ItkVtkGlue_USE_FILE})
set(Glue ItkVtkGlue)
endif()
##############################################
# FASTPD
add_library(FASTPD Fast_PD.cpp Fast_PD.h common.h block.h)
add_library(GRAPH graph.h graph.cpp)
add_library(linked LinkedBlockList.h LinkedBlockList.cpp)
add_library(MAXFLOW maxflow.cpp)
include_directories(${PROJ_INCLUDE_DIRS})
add_executable(${PROJ_NAME} main.cpp)
target_link_libraries(linked MAXFLOW)
target_link_libraries(GRAPH linked)
target_link_libraries(FASTPD GRAPH)
target_link_libraries(${PROJ_NAME} FASTPD)
target_link_libraries(${PROJ_NAME}
${PROJ_LIB} ${Glue} ${VTK_LIBRARIES} ${ITK_LIBRARIES}
)
相关文章:
- CMake - 模块 + 库混淆
- 通过 cmake 从C++扩展构建 Python 子模块
- Cmake 查找模块用于区分共享库或静态库
- 如何将 Pybind11 与 CMAKE 一起使用以链接 2 个模块
- 如何将 c++20 模块与 CMake 一起使用
- CMAKE-输出目录结构和QML模块
- 如何添加其他CMAKE模块的静态LIB
- 如何为"boost-like"多组件库编写 cmake 模块?
- 创建用于使用库的 cmake 模块
- CMake - 将静态 yaml-cpp 作为 git 子模块的链接器错误
- 如何为模块化项目正确创建 CMake 文件
- Cython Cmake模块运行时错误
- OpenCV 模块作为符号链接会导致 cmake 错误
- 如何在使用CMake时包装多个Swig模块
- 如何在 CMake 中使用 VC++ 模块
- 如何在 cmake 项目上构建 cpp 模块
- 用于模块化c++框架的CMAKE
- 如何将QSerialPort模块添加到CMake中
- 如何为jsoncpp编写cmake模块
- 如何做CMake模块