Windows下使用cmake 组织工程,编译静态库、动态库,导入第三方库,编译工程
目标:编译一个含有三个文件的工程,使用三种方法:
1、使用主工程的CMakeLists.txt生成所有目标
2、将main.cpp外的其他文件作为子工程
2、首先将main.cpp外的其他文件编译为库,然后将其作为第三方库导入
1 使用主工程的CMakeLists.txt生成所有目标
1.1 构建静态库并进行编译
工程结构:
CMakeLists.txt
cmake_minimum_required(VERSION 3.10.0)
# 最低版本要求 cmake 构建工具小于3.10.0将报错
project(main)
# 工程项目名称
set(MOD_MY_CALCULATION_PATH ${
CMAKE_SOURCE_DIR}/my_calculation)
# 设置一个变量标记路径
# ${CMAKE_SOURCE_DIR} 这个取CMake自带宏里面的路径 就是这个CMakeLists.txt所在的路径
aux_source_directory(${
MOD_MY_CALCULATION_PATH} MOD_MY_CALCULATION_SRC)
# ${} 固定的范式,取变量 MOD_MY_CALCULATION_PATH 里面的值,这里为 ${CMAKE_SOURCE_DIR}/my_calculation
# MOD_MY_CALCULATION_SRC自定义的一个变量
# 整条语句将对 ${CMAKE_SOURCE_DIR}/my_calculation 的源码*.cpp 和*.c 文件 输出到变量 MOD_MY_CALCULATION_SRC
add_library(my_calculation STATIC ${
MOD_MY_CALCULATION_SRC}) # 构建静态库
# 将所有的源文件归档成lib 这一句将会在build下生成lib
# --------------上面的语句就已经能够生成静态库------------------
aux_source_directory(${
CMAKE_SOURCE_DIR} RP_ALL_SRC)
# 这里对 ${CMAKE_SOURCE_DIR} 也就是当前CMakeList.txt 目录下的*.cpp输出到变量
# RP_ALL_SRC (RP_ALL_SRC 意为顶层目录所有源码)
add_executable(main ${
RP_ALL_SRC})
target_link_libraries(main my_calculation)
#为生成目标添加编译的库(my_calculation) 可以是多个 比如 target_link_libraries(main lib1 lib2)
#这里因为是在同一个CMakeLists.txt中 所以lib会被识别并找到,这里默认构建了其生成的依赖关系
my_calculation.h
#pragma once
int my_sum(int n);
my_calculation.cpp 定义一个函数,计算0到输入值之间所有正整数的和
#include "my_calculation.h"
int my_sum(int n)
{
int sum = 0;
for