cmake find_package的基本原理与详细示例(三):find_package的Module模式简单示例——查找第三方库(如:boost、gflags)

1、下载、构建boost,然后配置BOOST_ROOT环境变量(建议放在~/.bashrc文件中,然后执行:source ~/.bashrc)

2、下载、构建 、安装glfags,这里放在了/usr/local目录

3、查找和使用的CMakeLists.txt文件:

cmake_minimum_required( VERSION 3.8 FATAL_ERROR)
project(main LANGUAGES CXX)
 
#set dirs
list(APPEND CMAKE_MODULE_PATH 
    $ENV{BOOST_ROOT}/stage/lib/cmake  # append boost cmake dir
    /usr/local/lib/cmake/             # append gflags cmake dir
    )

set(PROJECT_ROOT ${CMAKE_CURRENT_LIST_DIR})
message("project dir:${PROJECT_ROOT}")
 
SET(BIN_DESTINATION ${PROJECT_SOURCE_DIR}/bin)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_DESTINATION})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_DESTINATION})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DESTINATION})
 
#include cmake files
include(${PROJECT_ROOT}/version.cmake)

find_package(Boost REQUIRED COMPONENTS filesystem log system date_time)  #find boost components
find_package(gflags REQUIRED COMPONENTS static)      #find gflags
 
#set compile flags
#add_definitions(-std=c++11 -g -rdynamic)
set(CMAKE_CXX_FLAGS "-g3 -rdynamic -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0 -fsanitize=address -fno-omit-frame-pointer -fsanitize=leak")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 
#include dirs
include_directories(./ 
    $ENV{BOOST_ROOT})
 
#link dirs
link_directories(${BIN_DESTINATION})
 
 
#execute 
SET(SRC_MAIN demo.cpp main.cpp )
add_executable( ${PROJECT_NAME} ${SRC_MAIN})
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})    
target_link_libraries(${PROJECT_NAME} gflags Boost::filesystem Boost::log Boost::system Boost::date_time) #link gflags and boost components

注意:需要配置好CMAKE_MODULE_PATH,因为find_package就是通过CMAKE_MODULE_PATH来查找库的

猜你喜欢

转载自blog.csdn.net/lianshaohua/article/details/109186483