服务器出租网站,c2c网站 多钱,宁波鄞州区商用高端网站设计,专门做颜料的网站其他很好的总结
CMake教程系列-01-最小配置示例 - 知乎 CMake 保姆级教程#xff08;上#xff09; | 爱编程的大丙
10-补充(完结)_哔哩哔哩_bilibili
1、基本关键字
SET命令的补充
#xff08;1#xff09;SET命令设置执行标准
#增加-stdc11 set(CMAKE_CXX_STANDARD…其他很好的总结
CMake教程系列-01-最小配置示例 - 知乎 CMake 保姆级教程上 | 爱编程的大丙
10-补充(完结)_哔哩哔哩_bilibili
1、基本关键字
SET命令的补充
1SET命令设置执行标准
#增加-stdc11 set(CMAKE_CXX_STANDARD 11) #增加-stdc14 set(CMAKE_CXX_STANDARD 14) #增加-stdc17 set(CMAKE_CXX_STANDARD 17)
(2) SET命令设置
set(HOME /home/robin/Linux/Sort) set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
第一行定义一个变量用于存储一个绝对路径 第二行将拼接好的路径值设置给EXECUTABLE_OUTPUT_PATH宏 如果这个路径中的子目录不存在会自动生成无需自己手动创建
作者: 苏丙榅 链接: https://subingwen.cn/cmake/CMake-primer/
MESSAGE关键字
向终端输出用户自定义的信息
主要包含三种信息
SEND_ERROR产生错误生成过程被跳过STATUS,输出前缀--的信息MESSAGE(STATUS this is binary dir)FATAL_ERROR,立即终止cmake过程
ADD_EXECUTABLE关键字
生成可执行文件ADD_EXECUTABLE(hello main.cpp)
注意工程名HELLO和生成的可执行文件hello是没有关系的
cmake 语法基本原则
变量使用${}方式取值但是在IF控制语句中是直接使用变量名
指令参数1 参数2 ...参数使用括弧扩起参数之间使用空格或分号分开
指令是大小写无关的参数和变量是大小写相关的但推荐指令全部大写
语法注意
set(SRC_LIST main.cpp)可以加双引号 set(SRC_LIST mian.cpp),如果名字中有空格则建议加引号
ADD_EXECUTABLE(hello main)后缀可以不写他会自动取找.c和.cpp但是最好写后缀防止有main这样的可执行文件等文件。
2、内部构建和外部构建
内部构建产生的文件特别多不方便清理
外部构建会把产生的临时文件放在build下不会对源文件有任何影响推荐使用外部构建方式
mkdir build
cd build
cmake ..
make
3、工程配置 make install
可以用src文件夹放源码可以在工程中添加脚本runhello.sh来调用hello二进制。将构建后的文件放到bin子目录
3.1 将生成文件放到bin
mkdir src
mv main.cpp src/
cd src
touch CMakeList.txtsrc 下
cd ..
touch CMakeList.txt(工程下) CMakeList.txt(工程下)
PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin) #关联src
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake)#安装文件
INSTALL(PROGRAMS runhello.sh DESTINATION bin)#安装脚本
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake)#安装doc下的hello.txt
CMakeList.txt(src下)
ADD_EXECUTABLE( hello main.cpp) ADD_SUBDIRECTORY指令
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
这个指令用于当前工程添加存放源文件的子目录并且可以指定中间二进制和目标二进制的存放位置
EXCLUDE_FROM_ALL函数是将写的目录从编译中排除如程序中的example
ADD_SUBDIRECTORY(src bin)将src子目录加入工程并指定编译输出包含编译中间结果路径为bin目录。如果不进行bin目录指定那么编译结果在build/src目录下
3.2安装COPYRIGHT和README
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake)
FILES文件
DESTINATION:写绝对路径可以写相对路径相对路径实际路径是
${CMAKE_INSTALL_PREFIX}/DESTINATION定义的路径
CMAKE_INSTALL_PREFIX 默认在、usr/local/
cmake -DCMAKE_INSTALL_PREFIX/usr 在cmake时候指定CMAKE_INSTALL_PREFIX变量的路径
3.3安装脚本runhello.sh
PROGRAMS:非目标文件的可执行程序安装比如脚本之类
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
说明实际安装到的是/usr/local/bin
3.4安装doc中的hello.txt
一是通过在doc目录建立CMakeList.txt通过install下的file
二是直接在工程目录通过
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake)
DIRECTORY后面连接的是所在source目录的相对路径
注意abc/和abc有很大区别。不以/结尾这个目录将被安装位目标路径下。以/结尾这个目录中的内容将安装到目标路径
4、静态库和动态库构建
4.1
tree:
├── build ├── CMakeLists.txt └── lib ├── CMakeLists.txt ├── hello.cpp └── hello.h
hello.h:
#ifndef HELLO_H
#define HELLO_Hvoid HelloFunc();#endif
hello.cpp
#include hello.h
#include iostream
void HelloFunc(){std::couthello worldstd::endl;
}
CMakeLists.txt外层
PROJECT(HELLO)ADD_SUBDIRECTORY(lib bin)
CMakeLists.txt
SET(LIBHELLO_SRC hello.cpp)
ADD_LIBRARY(hello SHARE ${LIBHELLO_SRC})#生成共享库
ADD_LIBRARY
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
hello:就是正常的库名生成的名字会加上lib,最终文件是libhello.lib
SHARED,动态库STATIC,静态库
${LIBHELLO_SRC}:源文件
4.2同时构建静态库和动态库
SET_TARGET_PROPERTIES
这条指令可以用来设置输出的名称对于动态库还可以用来指定动态库版本和API版本