Cmake的安装与CMakeLists.txt的编写
本文最后更新于:2022年3月18日 晚上
安装#
cmake是自动化项目编译工具,可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
下载地址👉Download | CMake, 建议二进制安装。
win:
https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-windows-x86_64.zip
ubuntu:
sudo apt install cmake
wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-linux-x86_64.tar.gz
centos:
sudo yum install cmake
arch:
sudo pacman -S cmake
编写CMakeLists.txt#
单文件单目录CMakeLists.txt编写
#
# 指定cmake版本
cmake_minimum_required(VERSION 3.22)
# 工程名
project(demo1)
# 指定编译后文件名
set(OUTPUTNAME demo1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2 -std=c++20") # 指定编译参数
# 指定源文件夹
aux_source_directory(. DIR_SRCS)
# 编译文件
add_executable(${OUTPUTNAME} ${DIR_SRCS})
此文件加编写完毕后,创建一个build文件夹,cd进去,执行cmake ..
,会生成Makefile文件,再然后执行make
编译,最终生成项目文件。
多文件单目录CMakeLists.txt编写
#
和demo1相同
# 指定cmake版本
cmake_minimum_required(VERSION 3.22)
# 工程名
project(demo2)
# 指定编译后文件名
set(OUTPUTNAME demo2)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2 -std=c++20") # 指定编译参数
# 指定源文件夹
aux_source_directory(. DIR_SRCS)
# 编译文件
add_executable(${OUTPUTNAME} ${DIR_SRCS})
多文件多文件夹CMakeLists.txt编写
#
每一个项目都要建一个CMakeLists.txt,并且每一个文件夹都要有一个CMakeLists.txt文件
项目根目录的CMakeLists.txt
# 指定cmake版本
cmake_minimum_required (VERSION 3.22)
# 项目信息
project (Demo3)
# 指定编译后文件名
set(OUTPUTNAME demo3)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2 -std=c++20") # 指定编译参数
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(${OUTPUTNAME} ${DIR_SRCS})
# 添加链接库
target_link_libraries(${OUTPUTNAME} MathFunctions)
项目其他目录的CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库,动态库
# 静态库add_library (MathFunctions STATIC ${DIR_LIB_SRCS})
add_library (MathFunctions SHARED ${DIR_LIB_SRCS})
库文件CMakeLists.txt编写
#
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库,动态库
# 静态库add_library (MathFunctions STATIC ${DIR_LIB_SRCS})
add_library (MathFunctions SHARED ${DIR_LIB_SRCS})
库文件安装CMakeLists.txt编写
#
在指定的库源文件目录添加:
# 指定 MathFunctions 库的安装路径
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)
demo会被放到bin,*.h
会被放到/usr/local/include
# 指定安装路径
install (TARGETS Demo DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/config.h"
DESTINATION include)
库文件指定输出路径与编译后的工程目录
#
库文件输出目录设置
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 把库文件的输出路径设置为lib
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# 生成链接库,动态库
# 静态库add_library (MathFunctions STATIC ${DIR_LIB_SRCS})
add_library (MathFunctions SHARED ${DIR_LIB_SRCS})
项目工程目录设置
cmake_minimum_required(VERSION 3.22)
project(abstract_factory_pattern)
set(OUTPUTNAME test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2 -std=c++20")
# 声明库文件目录
include_directories(${PROJECT_SOURCE_DIR}/mylib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) # 设置可执行文件输出目录为bin
aux_source_directory(. DIR_SRCS)
add_executable(${OUTPUTNAME} ${DIR_SRCS})
target_link_libraries(${OUTPUTNAME} Mylib) # 链接mylib目录下的Mylib库
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!