Step 1: A Basic Starting Point — CMake 3.23.0-rc5 Documentation
入门:cpp构建可执行文件
1.把.cxx和CmakeList.txt放在一个目录下,称作”source_path“。
为了看cmake中各个参数怎么设置,不同于教程中项目名称和可执行文件名称都设置的一样,我自己的CmakeList.txt中项目名称和可执行文件用了不一样的名字。
1 | cmake_minimum_required(VERSION 3.10) |
可以新建一个build目录,称作”build_path“,在build目录下对源码目录执行
1 | cmake "source_path" |
就可以”配置项目并生成原生构建系统“(configure the project and generate a native build system),在build_path中会出现项目配置相关的文件。(在哪个文件夹下执行cmake就会在哪个文件夹下生成bulid相关的文件)
2.然后执行
1 | cmake --build "build_path" |
然后调用该构建系统来实际编译项目,在build_path中会生成可执行文件。
编译好的可执行文件在build 目录下 , ./”编译好的可执行文件”就可以使用啦!
3.官方给的程序中的相关补充知识
C/C++ argc 和argv - 知乎 (zhihu.com)
argc ,argument count, 可执行文件在命令行中执行时,命令行传入的参数个数,包括可执行文件本身。
argv 是 argument vector的缩写表示传入main函数中的参数列表,其中argv[0]表示这个程序的名字。
1 int mian(int argc, char* argv[])
1 int main(int number, char const *para[])
版本号和配置头文件、指定cpp标准
1.相比于入门中的CmakeList.txt,这个CmakeList.txt中设置了项目的版本号,并且配置头文件把版本号传递给source code。
2.配置的文件将被写到binary tree目录下(CMakeCache.txt
所在的目录,即build目录),所以必须将那个目录添加到include搜索路径列表中。注意target_include_directories当中的写法,因为要找到build目录,所以使用zffTutorial_exe文件名作为参数,因为这个文件在build目录中,并且名字具有辨识度。
target_include_directories(zffTutorial_exe PUBLIC
"${PROJECT_BINARY_DIR}"
)
3.给项目添加一些C++11特性,在tutorial.cxx
中用std::stod
替换atof
。同时,删除#include<cstdlib>
。
在sou/home/workspace/feifeizhang/CMake-master/Help/guide/tutorial/Step1/zffTutorialConfig.h.in /home/workspace/feifeizhang/CMake-master/Help/guide/tutorial/Step1_build/zffTutorialConfig.h /home/workspace/feifeizhang/CMake-master/Help/guide/tutorial/Step1/tutorial.cxxrce code中创建zffTutorialConfig.h.in
,包含以下内容,设置版本号,@zffproject_VERSION_MAJOR@打头的前缀必须为项目名称
1 | // 该教程的配置选项和设置 |
在cmake ../Step1
的时候会在build目录下生成.h文件
CmakeLists.txt
1 | cmake_minimum_required(VERSION 3.10) |
编译后的执行结果1
2
3./zffTutorial_exe
./zffTutorial_exe Version 1.5
Usage: ./zffTutorial_exe number
Step 2: Adding a Library — CMake 3.23.0-rc5 Documentation
此小节中库的可选项,我编译之后没有产生可执行文件
现在,我们将添加一个库到项目中。这个库包含了我们自己实现的计算平方根的算法。之后的可执行文件可以使用这个库而不是编译器提供的标准平方根函数。
在MathFunctions
目录中创建CMakeLists.txt
文件,并将下面这行添加到MathFunctions
目录中的CMakeLists.txt
文件中:
1 | add_library(MathFunctions mysqrt.cxx) |
为了在源码中使用我们自己定义的平方根函数,需要在上层的CMakeLists.txt中做相应的修改
1 | 作者:被包养的程序猿丶 |