构建工具CMake新手指南
时间:2021-09-16
本文章向大家介绍构建工具CMake新手指南,主要包括构建工具CMake新手指南使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
教程一:编译单独的cpp文件
项目结构:
T1/
| -- CMakeLists.txt
| -- build /
| -- main.cpp
main.cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct SA {
char c;
int i;
string s;
};
class TreeNode {
public:
TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}
const int Val() const { return val; }
private:
int val;
TreeNode *left;
TreeNode *right;
};
template <typename T>
void PrintVec(const T &vec) {
if (vec.size() == 0) {
return;
}
for (int i = 0; i < vec.size() - 1; i++) {
cout << vec[i] << " ";
}
cout << vec[vec.size() - 1] << endl;
}
int main() {
vector<int> vi{1, 2, 3};
vector<string> vs{"A", "B", "C"};
vector<SA> vsa = {SA{'a', 1, "A"}, SA{'b', 2, "B"}};
vector<TreeNode *> vtn = {new TreeNode(10), new TreeNode(20)};
PrintVec(vi);
PrintVec(vs);
cout << "vsa:[" << vsa[0].c << "," << vsa[0].i << "," << vsa[0].s << "]" << endl;
cout << "vtn:" << vtn[1]->Val() << endl;
return 0;
}
CMakeLists.txt
project(T1)
cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cpp)
教程二:编译多个文件
项目结构:
T1/
| -- CMakeLists.txt
| -- build /
| -- main.cpp
| -- src /
| ---- func.h
| ---- func.cpp
func.h
#ifndef __FUNC_H__
#define __FUNC_H__
#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct SA {
char c;
int i;
string s;
};
class TreeNode {
public:
TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}
const int Val() const { return val; }
private:
int val;
TreeNode *left;
TreeNode *right;
};
template <typename T>
void PrintVec(const T &vec);
#endif
func.cpp
#include "func.h"
template <typename T>
void PrintVec(const T &vec) {
if (vec.size() == 0) {
return;
}
for (int i = 0; i < vec.size() - 1; i++) {
cout << vec[i] << " ";
}
cout << vec[vec.size() - 1] << endl;
}
template void PrintVec(const vector<int>&);
template void PrintVec(const vector<string>&);
main.cpp
#include <iostream>
#include <vector>
#include <string>
#include "src/func.h"
using namespace std;
int main() {
vector<int> vi{1, 2, 3};
vector<string> vs{"A", "B", "C"};
vector<SA> vsa = {SA{'a', 1, "A"}, SA{'b', 2, "B"}};
vector<TreeNode*> vtn = {new TreeNode(10), new TreeNode(20)};
PrintVec(vi);
PrintVec(vs);
cout << "vsa:[" << vsa[0].c << "," << vsa[0].i << "," << vsa[0].s << "]" << endl;
cout << "vtn:" << vtn[1]->Val() << endl;
return 0;
}
CMakeLists.txt
project(T1)
cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cpp src/func.cpp)
可以看出改动只是在add_executable新增了src/func.cpp文件。但是当文件特别多的时候,这种写法岂不是累死人,还容易出错。其实使用aux_source_directory命令更方便些。
project(T1)
cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 11)
aux_source_directory(src SRCS)
add_executable(main main.cpp ${SRCS})
还有我们也可以将src目录下的文件编译成一个库来使用:
project(T1)
cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 11)
aux_source_directory(src SRCS)
add_library(MY_FUNC ${SRCS})
add_executable(main main.cpp)
target_link_libraries(main MY_FUNC)
原文地址:https://www.cnblogs.com/FSCoder/p/15302049.html
- [libvirt][nginx]libvirt文档访问速度提高的小技巧
- 图论----同构图(详解)
- 基数排序与桶排序,计数排序【详解】
- SG函数和SG定理【详解】
- 密码学经典之生日悖论与生日攻击【详解】
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋(新生必做的水题)
- 快速傅里叶变换(FFT)算法【详解】
- Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)
- 作为程序员的你在外行人眼里是一个怎样的群体?
- 高斯消元法(Gauss Elimination)【超详解&模板】
- [快学Python3]读写Excel - openpyxl库
- HDU 2147 kiki's game(规律,博弈)
- HDU 1847 Good Luck in CET-4 Everybody!(规律,博弈)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解xamarin Android 实现ListView万能适配器
- android 设置wallpaper的操作方法
- R语言作图不显示中文解决办法,如何使用中文字体
- Android OKHTTP的单例和再封装的实例
- Android 自定义返回按钮的实例详解
- Android在layout xml中使用ViewStub完成动态加载问题
- Android编程中Intent实现页面跳转功能详解
- Android编程之桌面小部件AppWidgetProvider用法示例
- Android编程实现悬浮窗获取并显示当前内存使用量的方法
- Android ListView中动态添加RaidoButton的实例详解
- Android沉浸式状态栏设计的实例代码
- Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法
- R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
- Android 中两个Activity 之间的传值问题
- 学习使用Material Design控件(二)使用DrawerLayout实现侧滑菜单栏效果