目录
CMake
-
可以通过
-D
选项设置编译器和cpp版本cmake -Bbuild -DCMAKE_CXX_COMPILER=/usr/bin/gcc-6
可以指定使用gcc-6
编译cmake -Bbuild -DCMAKE_CXX_STANDARD=14
用c++14版本
-
使用
add_libaray
生成动态链接库或静态链接库add_libaray(mylib STATIC add.cpp)
和add_libaray(mylib SHARED add.cpp)
-
用
add_subdirtory
添加子模块- 复杂的项目一般都是有很多个子模块的
- 主CMakeLists.txt可以
add_subdirtory(myadd)
-
子模块的头文件如何处理 47分29秒
3. 自动引用子模块的头文件:可以子模块的CMakeLists.txt里添加target_include_directories(mylib PUBLIC . )
使用了PUBLIC
于是引用了mylib
的人就可以使用头文件了展开查看:49分05秒截图-带target和不带target的区别
-
添加一个宏定义
- 在cmake里写
target_add_difinitions(mylib PUBLIC MY_MACRO=1)
就相当于在代码里添加了#define MY_MACRO 1
,
- 在cmake里写
-
添加一个编译选项
target_compile_options(myapp PUBLIC -fopenmp)
就相当于在编译时添加了-fopenmp参数g++ -fopenmp -o myapp xxx
第三方库
- 第三方库分为3种,纯头文件库[1],可以作为子模块的库[2],必须预安装的库[3]
-
纯头文件库,只需要将头文件下载下来,然后用
include_directorys(spdlog/include)
即可,缺点是编译慢展开查看:小彭老师cmake第58分50秒截图一些常用的head_only的库
-
作为子模块的库,先把库下载下来,放到目录里,让后使用
add_subdirectory(fmt)
和target_link_libaraies(main PUBLIC fmt)
,就可以了
好处是比head_only的引入方式编译快展开查看:小彭老师cmake第1时08分截图用子模块的方式引入fmt库
-
系统预安装的库,首先我们引入库可能会出现菱形依赖问题,比如spdlog自带了fmt库,如果我们想要引入fmt和spdlog就会有菱形依赖问题,
使用系统预安装的方式就可以避免菱形依赖问题,因为系统预安装的方式会查找缓存,缓存里有fmt::fmt了就不会再引入了
具体使用方法就是find_package()
和target_link_libaraies
展开查看:小彭老师cmake第1时14分截图用系统预按装的方式
-
- 他简单介绍了glm这个好用的数学库,像opencv一样有vec和mat
- 标准库里有个std::valarry的东西,可以把array里的东西全部作一遍操作,比如valarry
arr(1.0,2.0,3.0),当使用arr2 = std::sin(arr * pi)时,arr2就是(3.14,6.18,9.42)