参考博文
1. 最简CMakeList编写
文件夹中只有
CMakeList.txt:
# cmake 的最小版本要求
cmake_minimum_required(VERSION 3.12)
# 这个CMakeLists管理的工程名称
project(cmakeTest)
#生成可执行程序 语法:add_executable(可执行程序名 要编译的cpp)
add_executable(cmakeTest main.cpp )
main.cpp
#include "iostream"
int main() {
std::cout << "hello cmake!" << std::endl;
return 0;
}
结果:
E:\self_study\git\cmake_demo\cmake-build-debug\cmakeTest.exe
hello cmake!
Process finished with exit code -1073741819 (0xC0000005)
2. Include相关
为了标准,在目录中添加文件夹include,用来存放头文件。
CMakeList.txt:
增加INCLUDE_DIRECTORIES
用来设定头文件目录
# cmake 的最小版本要求
cmake_minimum_required(VERSION 3.12)
# 这个CMakeLists管理的工程名称
project(cmakeTest)
#设定头文件目录,主程序中的#include的.h文件坐在的目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#生成可执行程序 语法:add_executable(可执行程序名 要编译的cpp)
add_executable(cmakeTest main.cpp )
.hpp:写一个测试函数
#include "iostream"
#include "string"
class Solution {
public:
std::string reverseWords(std::string s) {
std::cout << s << std::endl;
}
};
main.cpp调用一下
#include "iostream"
#include "q0151_reverseWords.hpp"
int main() {
std::cout << "hello cmake!" << std::endl;
Solution solution;
solution.reverseWords("test ok!");
return 0;
}
结果:
E:\self_study\git\cmake_demo\cmake-build-debug\cmakeTest.exe
hello cmake!
test ok!
Process finished with exit code -1073741819 (0xC0000005)
其中一般来说,.h里面只有声明,没有实现,而.hpp里声明实现都有,后者可以减少.cpp的数量。
3. c++版本
CMakeList.txt:添加一句set(CMAKE_CXX_STANDARD 11)
,这个数字随版本号变化。
# cmake 的最小版本要求
cmake_minimum_required(VERSION 3.12)
# 这个CMakeLists管理的工程名称
project(cmakeTest)
# 设置C++标准为 C++ 11
set(CMAKE_CXX_STANDARD 11)
#设定头文件目录,主程序中的#include的.h文件坐在的目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#生成可执行程序 语法:add_executable(可执行程序名 要编译的cpp)
add_executable(cmakeTest main.cpp )
为什么要指定版本?举个栗子:
我现在要用vector做事情,c++11支持如下这种赋值。
std::vector<int> a;
a = {1,2};
如果我的CMakeList.txt 缺少set(CMAKE_CXX_STANDARD 11)
,这里会报错(形式多种多样,这里不作展示),从而我只能这样写:
std::vector<int> a;
a.push_back(1);
a.push_back(2);
想象一下如果数组有很长。。。。。。(学前我TM就这么push了好多)
所以c++版本很重要
ps: git 相关
.gitignore文件编写
此文件为git忽略的文件列表,一般放置(数据集,编译文件等)
我的.gitignore
# "文件夹名"+"/"
cmake-build-debug/
.idea/