..

CMakeLists.txt 模板 - build boost


为什么

有时候要写个小测试程序,一般要类似这样的编译,指定一下include和Lib

g++ main.cc -o main -I ../../include -L ../../lib -lxxx.a

不觉得麻烦?


具体用法

工程代码大致结构如下, 其他 CMakeLists.txt 即下面的模板, build 目录需要创建一下 mkdir build,其实叫什么都可以, build 算是约定俗成。

---prj
---|---src
---|---CMakeLists.txt
---|---build
---

cd buildbuild 目录下执行。

cmake ..
make

build 目录下会产生除了可执行文件外还有其他文件。


模板

#Author : beautifularea
#Date   : 28/3/2021
#Desc   : cmake with boost 

SET(PROJECTNAME example)
PROJECT(${PROJECTNAME})
CMAKE_MINIMUM_REQUIRED(VERSION 3.10.2)

set(boost_root "/root/debug_boost/boost_1_65_0")
INCLUDE_DIRECTORIES("${boost_root}/include")
LINK_DIRECTORIES("${boost_root}/stage/lib")

AUX_SOURCE_DIRECTORY(./ DIR_MAIN_SRCS)
ADD_EXECUTABLE(${PROJECTNAME} ${DIR_MAIN_SRCS})

FIND_PACKAGE(Boost 1.65.0 COMPONENTS thread date_time filesystem system log log_setup REQUIRED)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_log_setup.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_log.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_system.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_date_time.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_filesystem.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} libboost_thread.a)
TARGET_LINK_LIBRARIES(${PROJECTNAME} -lpthread)


参考

【1】cmake
【2】使用CMakeLists.txt构建调试 asio 网络库