
在文件夹下编译单个文件,要编译的是tutorial.cxx这个文件。
其中CMakeLists.txt 文件内容如下:
cmake_minimum_required(VERSION 3.10) #set the project name and version project(Tutorial) #add the executable add_executable(Tutorial tutorial.cxx)
在命令行输入
cmake .
在当前文件夹下编译得到Makefile 和一大堆中间文件。
再编译一下
make
该路径下会多了一个Tutorial的可执行文件。
1添加版本号以及配置头文件使用project()命令给定版本号
3 #set the project name and version 4 project(Tutorial VERSION 1.0)
配置头文件并把版本号传给源码:
configure_file(TutorialConfig.h.in TutorialConfig.h)
配置的文件会被写入二叉树,需要把当前路径
9 #add the include directories 10 target_include_directories(Tutorial PUBLIC "$(PROJECT_BINARY_DIR)")
target_include_directories()用于编译给定target的时候指定include头文件目录。这个target是先要通过 add_executable()或者add_library()先生成的。而且这个target不能是ALIAS target(不能是别名),通过使用AFTER|BEFORE 可以选择附加还是预附加。INTERFACE|PUBLIC|PRIVATE 是为了给定target属性,后面的items就是头文件目录了。
target_include_directories([SYSTEM] [AFTER|BEFORE] [items1...] [ [items2...] ...])
在这里说明一下PROJECT_BINARY_DIR 和PROJECT_SOURCE_DIR 这俩变量的区别,如果如上面那个简单的case,源码和CMakeLists.txt 都在一个层级且在这个目录执行cmake ./或者cmake .。那生成makefile的和当前源码所在的目录都是当前目录,也就是这种时候以上俩变量一样。如果把源码和CMakeLists.txt放在子目录./src,并在主目录的子目录的./build目录下使用cmakecmake ../src,则cmake生成的makefile和一大堆中间文件都在build文件夹下,PROJCET_BINARY_DIR=./build;PROJECT_SOURCE_DIR =./src。
编写文件TutorialConfig.h.in:
// the configured options and settings for Tutorial #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@2 确定C++标准
在CMakeLists.txt 中添加如下字段来确定C++ 标准
# specify the C++ standard set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True)
由于确定了是c++11标准,需要修改源码文件:删除包含#include
mkdir Step1_build cd Step1_build cmake ../Step1 # 配置cmake [包含源码和CMakeLists.txt的路径] cmake --build . # 编译
这里我自己出了俩小bug
其中一个是
16 #add the include directories
17 target_include_directories(
18 Tutorial PUBLIC "${PROJECT_BINARY_DIR}" #之前错误使用 $(PROJECT_BINARY_DIR)
19 )
且在源代码中未include头文件导致出现bug:
里
修改俩bug就可了。
最后执行的时候
./Tutorial 9
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)