CMake

图片来源:https://www.pixiv.net/artworks/85222177

极简CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(HelloWrold)
add_executable(hello main.cpp)

设置编译使用的C++标准

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

设置项目名称和版本

project(Tutorial VERSION 1.0)

编译时自动生成包含版本号宏定义的头文件

configure_file(TutorialConfig.h.in TutorialConfig.h)
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
#define Tutorial_VERSION_MAJOR 1
#define Tutorial_VERSION_MINOR 0

添加INCLUDE路径

target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"   #添加编译目录
                           "${PROJECT_SOURCE_DIR}/MathFunctions" #添加源代码目录的MathFunctions目录
                           )

编译为静态库

add_library(MathFunctions mysqrt.cxx)

链接库

target_link_libraries(Tutorial PUBLIC MathFunctions)
target_link_libraries(Tutorial MathFunctions)       # 连接libMathFunctions.so库,默认优先链接动态库
target_link_libraries(Tutorial libMathFunctions.a)  # 显示指定链接静态库
target_link_libraries(Tutorial libMathFunctions.so) # 显示指定链接动态库

让使用MathFunctions库的地方自动添加使用MathFunctions库必要的include路径

add_library(MathFunctions mysqrt.cxx)
target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

参考:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注