当前位置:网站首页>Cmake tutorial step1 (basic starting point)
Cmake tutorial step1 (basic starting point)
2022-07-05 17:51:00 【It's beginning to boil】
CMake Official documents
Refer to the official cmake3.24 Course translation
https://cmake.org/cmake/help/v3.24/guide/tutorial/index.html
https://gitlab.kitware.com/cmake/cmake/-/tree/master/Help/guide/tutorial
step1
https://cmake.org/cmake/help/v3.24/guide/tutorial/A%20Basic%20Starting%20Point.html
My warehouse :
https://github.com/FRBoiling/cmake-tutorial.git
Basic starting point
Build and run a basic project ( Executable files built from source code files ), This will be the starting point of our tutorial .
Create project folder
Create project folder Step1, And enter
mkdir Step1
cd Step1
Create source code file
Source code file tutorial.cxx, The content of the file is the same as the code for calculating the square root of the official tutorial tutorial.cxx ( stay cmake Source code Step1 The catalog provides )
vi tutorial.cxx
vi tutorial.cxx
// A simple program that computes the square root of a number
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
if (argc < 2) {
std::cout << "Usage: " << argv[0] << " number" << std::endl;
return 1;
}
// convert input to double
const double inputValue = atof(argv[1]);
// calculate square root
const double outputValue = sqrt(inputValue);
std::cout << "The square root of " << inputValue << " is " << outputValue
<< std::endl;
return 0;
}
To write CMakeLists.txt file
stay rd-project Create a CMakeLists.txt file , The most basic project only needs one three lines CMakeLists.txt file .
vi CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
# set the project name
project(Tutorial)
# add the executable
add_executable(Tutorial tutorial.cxx)
Be careful , This example is in the CMakeLists.txt Lower case commands are used in the file .CMake Capital letters are supported 、 Lower case and mixed case commands .
Be careful , Only system instructions are case insensitive , But variables and strings are case sensitive
Build and run
2.1、 Create a build directory
cd ..
mkdir Step1_build
2.2、 Generate a local build system
Go to the build directory and run CMake To configure the project and generate a local build system
cd Step1_build
cmake ../Step1
2.3、 Actual compilation / Link items
Build the system locally to actually compile / Link items :
cmake --build .
thus , Build compilation complete .
2.4、 Try running an executable
./Tutorial 4294967296
./Tutorial 10
./Tutorial
The operation results are as follows 
Add the version number and configurable header file to the project
The first feature we will add is to provide a version number for our executables and projects . Although we can do this alone in the source code , But use CMakeLists.txt Provides greater flexibility .
3.1、 Use project() Command to set the project name and version number
cmake_minimum_required(VERSION 3.10)
# # set the project name
# project(Tutorial)
# set the project name and version
project(Tutorial VERSION 1.0)
3.2、 Configure a header file , Pass the version number to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)
3.3、 Because the configuration file will be written to the binary tree , We must add this directory to the path list to search for included files .
# add the binary tree to the search path for include files so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
)
3.4、 Use your favorite editor , Create in the source directory TutorialConfig.h.in, Contains the following :
// the configured options and settings for [email protected]@ The referenced variables can be accessed through CMakeLists.txt To set up
#define Tutorial_VERSION_MAJOR @[email protected]
#define Tutorial_VERSION_MINOR @[email protected]
When CMake When configuring this header file ,@[email protected] and @[email protected] The value of will be replaced .
tutorial.cxx Contains the configuration header file TutorialConfig.h
to update tutorial.cxx Source code , Print out the name and version number of the executable .cxx The contents are as follows :
// A simple program that computes the square root of a number
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <string>
#include "TutorialConfig.h"
int main(int argc, char* argv[])
{
if (argc < 2) {
// report version
std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
<< Tutorial_VERSION_MINOR << std::endl;
std::cout << "Usage: " << argv[0] << " number" << std::endl;
return 1;
}
// convert input to double
// const double inputValue = atof(argv[1]);
const double inputValue = std::stod(argv[1]);
// calculate square root
const double outputValue = sqrt(inputValue);
std::cout << "The square root of " << inputValue << " is " << outputValue
<< std::endl;
return 0;
}
Appoint c++ standard
Next , Let us in tutorial.cxx Lieutenant general atof Replace with std::stod, Add some... To our project c++ 11 characteristic . meanwhile , Delete
#include .
// file tutorial.cxx
// double inputValue = atof(argv[1]);
const double inputValue = std::stod(argv[1]);
We need to be in CMake The code explicitly declares the correct standards it should use .
stay CMake Enable access to specific c++ The simplest way to support standards is to use CMAKE_CXX_STANDARD Variable .
In this tutorial , take cmakellists .txt In the document CMAKE_CXX_STANDARD The variable is set to 11, And will CMAKE_CXX_STANDARD_REQUIRED Set to True.
You have to make sure you're in add_executable Added... Above the call CMAKE_CXX_STANDARD Statement .
Tutorial to this point , complete CMakeLists.txt The contents are as follows :
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(Tutorial VERSION 1.0)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# configure a header file to pass some of the CMake settings to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)
# add the executable
add_executable(Tutorial tutorial.cxx)
# add the binary tree to the search path for include files so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
)
Rebuild and test the changes
Refer to the above steps 2.2 To 2.4 refactoring , And try to run the executable , Observe changes 

边栏推荐
- 毫无章法系列
- 漏洞复现----48、Airflow dag中的命令注入(CVE-2020-11978)
- PMP认证需具备哪些条件啊?费用多少啊?
- Ant financial's sudden wealth has not yet begun, but the myth of zoom continues!
- How to save the trained neural network model (pytorch version)
- Kafaka技术第一课
- Knowledge points of MySQL (6)
- 統計php程序運行時間及設置PHP最長運行時間
- Six bad safety habits in the development of enterprise digitalization, each of which is very dangerous!
- 论文阅读_医疗NLP模型_ EMBERT
猜你喜欢

Knowledge points of MySQL (7)

Career advancement Guide: recommended books for people in big factories

Thesis reading_ Chinese NLP_ LTP

CVPR 2022最佳学生论文:单张图像估计物体在3D空间中的位姿估计

北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员

“12306” 的架构到底有多牛逼?

Daily exercise: a series of dates

IDEA 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun.

网络威胁分析师应该具备的十种能力

服务器配置 jupyter环境
随机推荐
Which platform of outer disk gold is regular and safe, and how to distinguish it?
mybash
2022新版PMP考试有哪些变化?
GFS分布式文件系统
ICML 2022 | Meta提出魯棒的多目標貝葉斯優化方法,有效應對輸入噪聲
Cmake tutorial step5 (add system self-test)
ITK Example
Simple query cost estimation
Configure pytorch environment in Anaconda - win10 system (small white packet meeting)
Cmake tutorial Step4 (installation and testing)
云主机oracle异常恢复----惜分飞
ICML 2022 | Meta propose une méthode robuste d'optimisation bayésienne Multi - objectifs pour faire face efficacement au bruit d'entrée
Six bad safety habits in the development of enterprise digitalization, each of which is very dangerous!
Neural network self cognition model
钉钉开放平台小程序API的缓存接口都有哪些内容?
QT控制台打印输出
To solve the problem of "double click PDF file, pop up", please install Evernote program
Cartoon: looking for the k-th element of an unordered array (Revised)
Clickhouse (03) how to install and deploy Clickhouse
ITK Example