1,APP cmake
1.1 hello_app_01 最简构建示例
1.1.0 知识点
由源文件 hello.cpp add_impl.cpp sub_impl.cpp 编译链接后得到 一个可执行文件: hello_01
add_executable(hello_01 hello.cpp add_impl.cpp sub_impl.cpp)
1.1.1 源码
文件:hello.cpp add_impl.cpp sub_impl.cpp CMakeLists.txt
hello.cpp
#include <iostream>
float add(float, float);
float sub(float, float);
int main()
{
float a, b;
a = 7.7f;
b = 2.333f;
std::cout<< "hello a + b =" << add(a, b) << std::endl;
std::cout<< "hello a - b =" << sub(a, b) << std::endl;
return 0;
}
add_impl.cpp
float add(float a, float b)
{
return a+b;
}
sub_impl.cpp
float sub(float a, float b)
{
return a - b;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(hello_01)
add_executable(hello_01 hello.cpp add_impl.cpp sub_impl.cpp)
1.1.2 编译运行
1.1.2.1 静默编译
cd hello_app_01/
mkdir build
cd build/
cmake ..
make
1.1.2.2 输出详细的编译命令选项
五个输出详细信息的编译方式:
cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON .. && make
cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. && make
cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. && make
set(CMAKE_VERBOSE_MAKEFILE ON)
cmake .. && make
cmake .. && make VERBOSE=1
1.1.2.2.1 cmake 显示方式
cd hello_app_01/
mkdir build
cd build/
cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON
make
1.1.2.2.2 make 显示方式
mkdir build_make_V
cd build_make_V/
ls
clear
cmake ..
make
make clean
make VERBOSE=1
上节中使用 两种方式给 CMakeLists.txt 的内建变量做了赋值,一个是在shell中赋值,一个是在 CMakeLists.txt 中赋值。
cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON
set(CMAKE_VERBOSE_MAKEFILE ON)
其中的set方式,同时可以用于定义一个变量,同时赋值。例如我们定义一个变量来存储所有源文件的名字:CPP_SRC_OF_MY_PROJ,其值为字符串 ”hello.cpp add.cpp sub.cpp“ 或者 ”hello.cpp;add.cpp;sub.cpp“
1.2 hello_app_02 变量的定义、赋值、取值
1.2.0 知识点
重要的事情说N遍,cmake中的变量都是字符串;
下边的命令定义了一个变量,效果类似 C语言中 :
char* CPP_SRC_OF_MY_PROJ="hello.cpp add_impl.cpp sub_impl.cpp"
后边的文件名可以用空格隔开,也可以用分号隔开
定义变量并赋值:
set(CPP_SRC_OF_MY_PROJ hello.cpp;add_impl.cpp;sub_impl.cpp)
变量的取值使用:
${CPP_SRC_OF_MY_PROJ }
1.2.1 源文件
cpp文件同1.1中,有变化的是 CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(hello_02)
#set(CPP_SRC_OF_MY_PROJ hello.cpp add_impl.cpp sub_impl.cpp)
set(CPP_SRC_OF_MY_PROJ hello.cpp;add_impl.cpp;sub_impl.cpp)
add_executable(hello_02 ${CPP_SRC_OF_MY_PROJ})
效果完全等价于:
cmake_minimum_required(VERSION 3.10)
project(hello_02)
set(CPP_SRC_OF_MY_PROJ hello.cpp add_impl.cpp sub_impl.cpp)
#set(CPP_SRC_OF_MY_PROJ hello.cpp;add_impl.cpp;sub_impl.cpp)
add_executable(hello_02 ${CPP_SRC_OF_MY_PROJ})
1.2.2 编译并运行
mkdir build/
cd build/
cmake ..
make
./hello_02
1.3 hello_app_03
文件:
编译:
运行:
1.4 hello_app_04
文件:
编译:
运行:
1.5 hello_app_05
文件:
编译:
运行:
2,LIB cmake
2.1 hello_lib_01
文件:
编译:
运行:
2.2 hello_lib_02
文件:
编译:
运行:
2.3 hello_lib_03
文件:
编译:
运行:
2.4 hello_lib_04
文件:
编译:
运行:
2.5 hello_lib_05
文件:
编译:
运行:
2.6 hello_lib_06
文件:
编译:
运行: