当前位置:网站首页>Cmake learning and use notes (1)
Cmake learning and use notes (1)
2022-07-07 13:17:00 【ly_ zszcyx】
Catalog
problem : To be solved ?---- Solved
set Set a variable ------------------------- Add version number
Set the system's own variables
add_definitions------------------------- Add macro definition
Using tools :
vs 2019, Clion
System : Windows
Refer to the website :cmake Use the tutorial ( One )- start - Nuggets
Project settings :
project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [LANGUAGES <language-name>...])
You can only set the project name : Such as :
project ("cPulsPlusTestProject")You can also set the item description , Project address, etc
project (cPulsPlusTestPrj
VERSION 1.0.0
DESCRIPTION " Project description :xxxxx"
HOMEPAGE_URL " Project address , such as :github Address "
LANGUAGES CXX)Be careful : The above code fragment must be capitalized , Otherwise, the compilation will not pass , such as (LANGUAGES CXX, DESCRIPTION etc. )
Build the program
Use cmake To build programs :
Use cmake .
Before building :

After construction :

But I use it clion The built program always defaults to vs 2019
After construction :

If you want to re cmake , Need to delete cache 

make
windows Prompt make Not an internal command
If you use MinGW, Yours make It's called mingw32-make
If you use MSVC, Yours make It's called nmake
problem : To be solved ?---- Solved
cmake . Always default to vs2019
Suspected : Not understanding cmake Back point (.) What does that mean?
After testing, it should be the path , It should be exactly CMakeList.txt The position of , therefore I should be ../ Return to upper level

Always use the upper path , therefore cmake come out Always default to vs 2019 
When I enter mingw Next , What we build is not vs 2019 The environment : Such as :

set Set a variable ------------------------- Add version number
set(KEY VALUE) Take two parameters , Used to declare variables . stay camke Use... In grammar KEY You can't get... Directly VALUE, You have to use ${KEY} This way of writing to get VALUE.
Set the system's own variables
Such as :C++ standard
set(cmake_cxx_standard 11)
Set custom variables
Set custom variables , for example : Set the header file search path

CMAKE_CURRENT_SOURCE_DIR
This is the currently processed CMakeLists.txt directory
Add version number
First set two variables
set (cPlusPlusTest_version_major 1)
set (cPlusPlusTest_version_minor 0)
configure_file(
"${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
"${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
)
stay cPlusPlusTestConfig.h.in Add
#define cPlusPlusTest_version_major @[email protected]
#define cPlusPlusTest_version_minor @[email protected]

Use 
Expand :
configure_file(input output options)
Put a file ( from input Parameter assignment ) Copy to the specified location ( from output Parameter assignment ), And according to options Modify its contents .
configure_file Commands are generally used to customize compilation options or customize macro scenarios .configure_file The order will be based on options Specified rule :
- COPYONLY: Just copy files , Don't do any variable substitution . This option specifies
NEWLINE_STYLEOption cannot be used ( Invalid ). - ESCAPE_QUOTES: Avoid any backslash (C style ) escape .
take input File copy to output file , And the variables in the input file content , Replace the reference with @[email protected] or ${VAR} Variable value . Each variable reference will be replaced with the current value of the variable , If the variable is not defined , Is an empty string .
for example :cPlusPlusTestConfig.h.in
1. Definition CMakeList.txt
set (cPlusPlusTest_version_major 1.9)
set (cPlusPlusTest_version_minor 0)
configure_file(
"${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
"${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
)2. cPlusPlusTestConfig.h.in( Input file )
#define cPlusPlusTest_version_major @[email protected]
#define cPlusPlusTest_version_minor @[email protected]
3. cPlusPlusTestConfig.h( The output file )
Automatic generation , There is no need for us to manually input

PROJECT_BINARY_DIR: The official explanation is The full path used to generate the project directory
for example :

PROJECT_SOURCE_DIR: PROJECT_SOURCE_DIR Include for PROJECT() The most recent CMakeLists.txt The folder where the file is located .
for example : The inner layer of the CMakeLists.txt Medium not included project()
An error will occur Tell me the file doesn't exist

I put it on the outer layer , There is no error

add_definitions------------------------- Add macro definition
Add one flag For pretreatment
There are two ways to add :
- -D start
- /D start
for example :add_definitions(-DMyDebug)

Use :
Be careful : Do not use the front -D
边栏推荐
- DHCP 动态主机设置协议 分析
- 滑轨步进电机调试(全国海洋航行器大赛)(STM32主控)
- DrawerLayout禁止侧滑显示
- 《开源圆桌派》第十一期“冰与火之歌”——如何平衡开源与安全间的天然矛盾?
- Summary of import, export, backup and recovery of mongodb
- Vscade editor esp32 header file wavy line does not jump completely solved
- PACP学习笔记三:PCAP方法说明
- Users, groups, and permissions
- 飞桨EasyDL实操范例:工业零件划痕自动识别
- 云检测2020:用于高分辨率遥感图像中云检测的自注意力生成对抗网络Self-Attentive Generative Adversarial Network for Cloud Detection
猜你喜欢

.Net下極限生產力之efcore分錶分庫全自動化遷移CodeFirst

OSI seven layer model

通过Keil如何查看MCU的RAM与ROM使用情况

【学习笔记】zkw 线段树

MySQL入门尝鲜

Practical example of propeller easydl: automatic scratch recognition of industrial parts

Vscode编辑器ESP32头文件波浪线不跳转彻底解决

Coscon'22 community convening order is coming! Open the world, invite all communities to embrace open source and open a new world~

详细介绍六种开源协议(程序员须知)

Japanese government and enterprise employees got drunk and lost 460000 information USB flash drives. They publicly apologized and disclosed password rules
随机推荐
What are the benefits of ip2long?
PCAP学习笔记二:pcap4j源码笔记
高端了8年,雅迪如今怎么样?
LIS 最长上升子序列问题(动态规划、贪心+二分)
Some principles of mongodb optimization
Unity 构建错误:当前上下文中不存在名称“EditorUtility”
JNA学习笔记一:概念
[untitled]
Conversion from non partitioned table to partitioned table and precautions
Test next summary
Star Enterprise Purdue technology layoffs: Tencent Sequoia was a shareholder who raised more than 1billion
Sequoia China completed the new phase of $9billion fund raising
Practical example of propeller easydl: automatic scratch recognition of industrial parts
Pay close attention to the work of safety production and make every effort to ensure the safety of people's lives and property
test
OSI 七层模型
About the problem of APP flash back after appium starts the app - (solved)
分屏bug 小记
leecode3. 无重复字符的最长子串
MySQL入门尝鲜