创建用于使用库的 cmake 模块

Creation of a cmake module for using a library

本文关键字:cmake 模块 用于 创建      更新时间:2023-10-16

>我是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}
)