关键词不能为空

当前您在: 主页 > 英语 >

cmake是干什么的_华清远见

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-18 09:20
tags:

-

2021年2月18日发(作者:后悔药)


CMake


是干什么的


?

linux


里面装


CMake


是干 什么的


?


有什么用呢


?


请往下看,我们来说说


CMake!


CMake


是一个跨平台的安装


(


编译


)


工具,可以用简单的语句来描述所有平台的安装


(< /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 ]


[[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


版本的


install


命令



2. FILES


版本的


i nstall


命令



3. PROGR AMS


版本的


install


命令



4. DIRECTORY


版本的


install


命令



5. SCRIPT



CODE


版本的


install


命令

< br>


6. EXPORT


版本的


i nstall


命令



具体命令可以去官 网查看区别,现在只阐述较为常用的


TARGETS


版本的


install


命令的基本内容。



TARGETS


格式的


install


命令规定了安装工程中的目标


(targets)

的规则。可执行文件都被当做


RUNTIME


< p>
标。静态链接的库文件总是被当做


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


...)


为一个目标设置属性。



你能够使用任何你想要的属性


/


值对,并且 在随后的代码中调用


GET_TARGET_PROPERTY


命令取出属性的值。



SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME


OUTPUT_NAME


也是一个属性。



? e



导入


cmake

< br>模块。




cmake


安装目录中,一般有很多


cmake


模块让我们 在编写



的时候导入进去,具体内容


如下:




如:如果我们想检查编译环境的时候,就可以加入

< p>
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

< p>
前,不可以删除



文件。



2.


当我们把一个已经执行过的


cm ake


命令的工程移到其他电脑时,注意删除


< br>文件,再重


新执行


cmake


命 令。



3.


许多配置是可以在



里面修改的,如我们想更改编译工具,改成


a rm-linux-gcc




修改



内容:




或者



里更改。



因为交叉编译的时候需要手动配置所调用的库文件,因此可以修改变量

< br>CMAKE_EXE_LINKER_FLAGS



4.


可以配合


pkg- config


使用,具体配置和使用方法。


< br>看完以上内容,你知道


CMake


是干什么的了吗


?


更多精彩内容在华清远见官网,


it


学习资料,华清远见提


供免费教程学习


!


-


-


-


-


-


-


-


-



本文更新与2021-02-18 09:20,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/664841.html

cmake是干什么的_华清远见的相关文章