建网站要学哪些软件,上海最新新闻发布,电脑网站兼职在哪里做,福清手机网站建设1.include
https://blog.csdn.net/qq_38410730/article/details/102677143
CmakeLists.txt才是cmake的正统文件#xff0c;而.cmake文件是一个模块文件#xff0c;可以被include到CMakeLists.txt中。
include指令一般用于语句的复用#xff0c;也就是说#xff0c;如果有…1.include
https://blog.csdn.net/qq_38410730/article/details/102677143
CmakeLists.txt才是cmake的正统文件而.cmake文件是一个模块文件可以被include到CMakeLists.txt中。
include指令一般用于语句的复用也就是说如果有一些语句需要在很多CMakeLists.txt文件中使用为避免重复编写可以将其写在.cmake文件中然后在需要的CMakeLists.txt文件中进行include操作就行了。
include(file|module)
.cmake文件里包含了一些cmake命令和一些宏/函数当CMakeLists.txt包含该.cmake文件时当编译运行时该.cmake里的一些命令就会在该包含处得到执行并且在包含以后的地方能够调用该.cmake里的一些宏和函数。
之后有机会再了解什么事宏和函数。
2.protobuf_generate_cpp
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
将foo.proto文件生成源码,使用PROTO_SRC,PROTO_HARS变量分别指代生成的cpp和h文件并可用于连接到target和设置include。
要求protobuf_generate_cpp命令和生成add_executable() 或 add_library() 的命令必须在同一个CMakeList中. 3.file命令
file(GLOB variable [RELATIVE path] [globbingexpressions]...)
file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件。GLOB 会产生一个由所有匹配globbing表达式的文件组成的列表并将其保存到变量中。如果指定了RELATIVE 标记返回的结果将是与指定的路径相对的路径构成的列表。
如果没有写正则表达式那么什么文件都匹配不到。例子
file(GLOB files *)// 会把文件和文件夹都包含进来
foreach(file IN LISTS files)message(STATUS ${file})
endforeach(file)
例子注意要用双引号cmake不支持单引号 打印结果目录和文件是同等地位被包含进来: 这段代码的意思是挑选出当前文件下的所有文件然后打印。
file(MAKE_DIRECTORY [directory1 directory2 ...])
MAKE_DIRECTORY在指定目录处创建子目录如果它们的父目录不存在也会创建它们的父目录。 5.add_subdirectory
https://www.jianshu.com/p/07acea4e86a3添加一个子目录并构建该子目录。
add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])# 绝对路径或当前目录的相对路径 []是可选参数
binary_dir指定文件输出存放路径。 6.自带变量
https://blog.csdn.net/wzj_110/article/details/116674655, https://juejin.cn/post/6844903999448055815
内置变量
CMAKE_CURRENT_LIST_DIR: 当前处理的cmake或CMakeListst.txt文件所在的目录 CMAKE_CURRENT_SOURCE_DIR指的是当前处理的 CMakeLists.txt 文件所在的路径。
PROJECT_SOURCE_DIR项目源文件的目录如果直接在代码目录下cmake那么此变量与PROJECT_BINARY_DIR内容相同
PROJECT_BINARY_DIR可执行文件的目录。
7.function用法
https://blog.csdn.net/qq_38410730/article/details/102677143
function(name [arg1 [arg2 [arg3 ...]]])COMMAND1(ARGS ...) # 命令语句COMMAND2(ARGS ...)...
function() 可以用${arg1}来引用变量。当宏和函数调用的时候如果传递的是经set设置的变量必须通过${}取出内容。
function(Foo arg)set(${arg} abc PARENT_SCOPE)message(# After change the value of arg.)message(arg ${arg})
endfunction()
message( Call function )
Foo(test)message(test value ${test})//CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
include(test.cmake) 打印结果 Call function
# After change the value of arg.
arg test //不太明白这里为什么是test值
test value abc 总之在CMakeLists访问变量就带上${}。
8.add_library()
add_library(name [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][source1] [source2 ...])# Normal Libraries
添加名为name的库name全局唯一库的类型是STATIC(静态库)/SHARED(动态库)/MODULE(模块库)之一生成的library名会根据STATIC或SHARED成为name.a或name.lib默认是STATIC选项。
add_library(name OBJECT [source...]) # Object Libraries
创建对象库(Object Library).对象库编译源文件但不会将其存档或链接到库中。由add_library命令或add_executable命令创建的其它目标可以使用$TARGET_OBJECTS:objlib形式的表达式作为源来引用对象其中objlib是对象库名称。 9.include_directories()
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …]) //默认是AFTER
将指定目录添加到编译器的头文件搜索路径之下。相当于g选项中的-I参数的作用也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用.
使用SYSTEM选项会把指定目录当成系统的搜索目录。
10.get_filename_component
https://blog.csdn.net/wzj_110/article/details/116431616
cmake获取文件名的特定部分。 路径文件名。
11.add_executable
https://blog.csdn.net/MacKendy/article/details/122549819
基于特定的源文件创建可执行文件名为name或者name.exe根据平台不同带exe后缀的是win平台。 创建名为name的target这个target在make的时候会编译为可执行文件。编译的源文件为[source1] [source2]…。
https://www.cnblogs.com/dbai/p/17209898.htmladd_executable的3种写法一种是最基础麻烦的第二是用file命令第三种是aux但头文件要单独加。
12.aux_source_directory
//语法
aux_source_directory(dir variable)//例子
//# 查找目录下的所有源文件
//# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
13.target_include_directories
target_include_directories(target [SYSTEM] [AFTER|BEFORE]INTERFACE|PUBLIC|PRIVATE [items1...][INTERFACE|PUBLIC|PRIVATE [items2...] ...])
该命令可以指定目标exe或者so文件需要包含的头文件路径。命名的目标必须是由add_executable()或add_library()之类的命令创建的并且不能是ALIAS目标。
14.add_dependencies
add_dependencies(target [target-dependency]...)
明确依赖关系始终在CMakeLists.txt中明确指定目标间的依赖关系避免隐式依赖。
例子【cmake 基础小知识】如何在CMake项目中使用add_dependencies命令管理目标依赖关系-阿里云开发者社区