-
CMake
是干什么的
?
linux
里面装
CMake
是干
什么的
?
有什么用呢
?
请往下看,我们来说说
CMake!
CMake
p>
是一个跨平台的安装
(
编译
)
工具,可以用简单的语句来描述所有平台的安装
(<
/p>
编译过程
)
。他能够输
< br>出各种各样的
makefile
或者
project
文件,
能测试编译器所支持的
C++
特性
,
类似
UNIX
下的
automake
。
只
是
CMake
的组态档取名为
。
Cmake
并不直接建构出最终的
软件,而是产生标准的建构档
(
如
Unix
的
Makefile
或
Windows Visual C++
的
projects/workspaces)
,然后再依一般的建构方式使
用。
这使得熟悉某个集
成开发环境
(IDE)
的开发者可以用标准的方式建构他的软件
,
这种可以使用各平台的
原生建构系统的能力是
CMake
和
SCons
等其他类似系统的区别之处。
一、<
/p>
Cmake
第一个程序
? 1.编写
hello.c
? 2. 编写
? 3. 执行
cmake .
“.” 代表的意思是当前目录,
cmake
< br>会查找该目录下的
文件
? 4.执行过程,生成
Makefile
? 5. 执行
make
二、
Cmake
语法详解
? T
PROJECT(projectname [CXX] [C] [Java]) <
/p>
若是为省略
[]
中内容,就默认全部支持
该句话中,
隐式的定义了两个变量,
下面是
里面的文件内容,里面有各种刚
刚系统配置的
变量内容,下面我们查看两个隐藏变量的内容:
? 2.
ADD_EXECUTABLE
生成可执行文件
,
可以忽略后缀
语法
:
_executable(
[WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1
[source2 ...])
2. add_executable(
IMPORTED [GLOBAL])
3. add_executable(
ALIAS )
具体更详细的可查看官网内容说明:
网址:
/cmake/help/v
3.7/command/add_?highlight=add_exe#command:add_
executable
?
3.
设置变量
语法:
SET(VAR
[VALUE] [CACHE TYPE DOCSTRING [FORCE]])
? 4.添加打印信息
语法:
message([STAT
US|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
当执行<
/p>
CMake
的命令的时候,
stdout
里会显示
STATUS
消息,而
stderr
上显示其他
error
消息。
而
cmake
的
gui
程序则会在
< br>log
里显示错误信息。如下图:
以下是
message
其他参数内容
STATUS =
非重要消息
;
WARNING =
CMake
警告
,
会继续执行
;
AUTHOR_WARNING = CMake
警告
(dev),
会继续执行
;
SEND_ERROR
= CMake
错误
,
继续执行,但是会跳过生成的步骤
;
FATAL_ERROR = CMake
错误
,
终止所有处理过程
;
?
_SUBDIRECTORY
ADD_SUBDIRECTORY(source_dir
[binary_dir] [EXCLUDE_FROM_ALL])
增加源目录<
/p>
,
二进制目录
? 6.更换输出路径
更改
EXECUTABLE_OUTPUT_PATH
和
LIBRARY_OUTPUT_PATH
两变量内容
把生成可执行文件目录更改为工程目录的
bin
文件下,效果如下:
? 7.若是想
make
install,
需要指定
make install
目录
执行
c
make
命令,更改输出目录:
cmake
–
D
CMAKE_PREFIX_FILE=/usr/local
查看
前面的只是单独的指定目录,现在,指定需要
make
install
的内容。
语法:
install(TARGETS targets... [EXPORT ]
p>
[[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDL
E|
PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
[DESTINATION
][PERMISSIONS
permissions...]
[CONFIGURATION][Debug|R
elease|...]][COMPONENT
][OPTIONAL][NAMELINK_ONLY|NAMELINK_SKIP]]
[...])
Install
分为不同的书写版本
分别为:
1. TARGETS
p>
版本的
install
命令
2. FILES
版本的
i
nstall
命令
3. PROGR
AMS
版本的
install
命令
p>
4. DIRECTORY
版本的
install
命令
5. SCRIPT
和
CODE
版本的
install
命令
< br>
6. EXPORT
版本的
i
nstall
命令
具体命令可以去官
网查看区别,现在只阐述较为常用的
TARGETS
版本的
p>
install
命令的基本内容。
TARGETS
格式的
install
命令规定了安装工程中的目标
(targets)
的规则。可执行文件都被当做
RUNTIME
目
标。静态链接的库文件总是被当做
ARCHIVE
目标。模块库总是被当做
LIBRARY
目标。对于动态库不是
DLL
格式的平台来说,动态库会被当做
LIBRARY
目标来对待。
?
8.静态库和动态库
ADD_LIBRARY(target
[SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1
source2 ... sourceN)
因此,我们可以
ADD_LIBRARY(hello SHARED source.c)
静态库
ADD_LIBRARY(hello STATIC source.c )
但若是想同时构建
target
名字相同的时
候,如:
和
libhello.a,
该怎么办呢
?
这时候就要用到
set_target_properties(target1
target2
...
PROPERTIES
prop1
value1
prop2
value2
...)
为一个目标设置属性。
p>
你能够使用任何你想要的属性
/
值对,并且
在随后的代码中调用
GET_TARGET_PROPERTY
命令取出属性的值。
SET_TARGET_PROPERTIES(hello_static
PROPERTIES OUTPUT_NAME
OUTPUT_NAME
也是一个属性。
?
e
导入
cmake
< br>模块。
在
cmake
安装目录中,一般有很多
cmake
模块让我们
在编写
的时候导入进去,具体内容
如下:
如:如果我们想检查编译环境的时候,就可以加入
CheckCXXCompilerFlag
模块。
下面是该模块的内容:
具体的
macro
< br>命令与
C
语言中的宏类似,而
f
oreach
等内容跟
shell
语法
类似,这里就不详细阐述了。
?
_package
语法:
? find_package( [version] [EXACT]
[QUIET] [MODULE] [REQUIRED] [[COMPONENTS]
[components...]]
[OPTIONAL_COMPONENTS
components...] [NO_POLICY_SCOPE])
例:
find_package(OpenCV 3.1.0 REQUIRE)
该命令会查找和加载外部模块的设置
而变量
_FOUND
将会被设置去指明是否找到了该包
语法详解:
QUIET
设置不显示找不到包的信息
REQUIRED
如果找不到就会停止处理并且显示错误信息
< br>上述的信息已经能简单的查找到需要的包了,但是,我们需要更加详细的命令来使程序可读性更高
find_package
跟
install
类似,有两种模式:
? 模式
该模式被使用为上述的简
单编写,
cmake
会去
CMAKE_
MODULE_PATH
中需找
,如果
被找到,将会
去读取并且执行,如果找不到,就会继续去查找安装目录的
Module
中查找,他将会去查找包,查看他的编
号
,处理一些需要的信息。
如果没有找到怎么办呢
?
就会调用下
面的
Config
模式。
? 模式
但如果添加了
CONFIG
参数,则
会跳过
MODULE
模式。
?
Config
模式将会去定位一个配置文件,会寻找
或者
-
模块。
只要找到了
package
,就会定义下列变量:
? _FOUND _INCLUDE_DIRS
? _INCLUDES
_LIBRARIES
? _LIBRARIES
?
_LIBS _DEFINITIONS
因此,我们可以通过
判断这些变量来确定
package
是否被找到,也可以在包含
库的时候使用这些变量。
还可以自己编写上述两种配置文件,然后利用:
SET(CMAKE_MODULE_PATH
dir)
指定查找的目录
Cmake
语法简单介绍就到此为止了,想要知道更加详细的命令信息,可以去官网的参考文档中查
找相关的
语法,
一般在查看大型应用的过程中,
都是通过查看官网的开发文档来查看相关信息,
然后通过
cmake-gui
修改相关变量,或者执行完
cmake<
/p>
命令后,去修改
CmakeCache
命
令。
官网文档地址:
/cmake/help/v3.7/
下面是笔者在实践过程中的一点小建议:
1.
当我们执行
make
前,不可以删除
文件。
2.
当我们把一个已经执行过的
cm
ake
命令的工程移到其他电脑时,注意删除
< br>文件,再重
新执行
cmake
命
令。
3.
许多配置是可以在
里面修改的,如我们想更改编译工具,改成
a
rm-linux-gcc
。
修改
内容:
或者
里更改。
因为交叉编译的时候需要手动配置所调用的库文件,因此可以修改变量
< br>CMAKE_EXE_LINKER_FLAGS
4.
可以配合
pkg-
config
使用,具体配置和使用方法。
< br>看完以上内容,你知道
CMake
是干什么的了吗
?
更多精彩内容在华清远见官网,
it
学习资料,华清远见提
供免费教程学习
!
-
-
-
-
-
-
-
-
-
上一篇:疯狂猜成语完整终答案(全)
下一篇:made词组