Linux下cmake相关

因为需要在linux环境下编写一个统一编译的shell脚本,看了一下cmake相关的东西。

整个shell脚本中具体执行的流程:

1.svn更新代码

2.获取CMakeLists.txt文件

3.cmake相关命令进行编译

重点在CMakeLists.txt文件上,因为它的语法之前并没有接触过,所以还是要了解一下的。


<1>变量定义

语法:SET(<NAME> <VALUE>)

举例:SET(INCLUDE ./source)  [定义一个INCLUDE的变量,其值为./source]


<2>内置函数

例如:

AUX_SOURCE_DIRECTORY(<PATH> <PATH_SRC>)

[将PATH目录路径下的文件名都储存在PATH_SRC中,注意子文件夹的名字是不会储存的]

FIND_PATH(<NAME> <FILENAME> <PATH1,PATH2..>)

[在PATH路径下寻找文件FILENAME,如果能找到则将其路径储存在NAME变量中]

INCLUDE_DIRECTORIES(<PATH1,PATH2...>)

[设置PATH路径为cmake编译时的include搜索路径]

LINK_DIRECTORIES(<PATH1,PATH2..>)

[设置PATH路径为cmake编译时的库文件搜索路径]

STRING( XXX XXX )字符串系列的函数

例如我使用到的一个利用正则表达式的字符串替换

STRING( REGEX REPLACE <regular> <replace> <NAME> <FROMSTR> ) 

[根据regular正则表达式匹配FROMSTR中符合的串,将其替换为replace中的值,最后存入NAME变量中]

举例:

STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} ) 

将当前目录路径中的目录名取出,存入CURRENT_FOLDER变量中。

其中".*/(.*)"为正则表达式,根据贪婪匹配原则,其匹配的/必然是最后一个分隔符。

()之内的表达式一般都是后续需要引用的值,根据从左到右的顺序可以用\1 \2的编号格式去引用它们。

因为是在字符串内,防止转义字符\起效,用两个\将其转义为普通的字符。


具体函数的使用可以查看该博主的介绍,比较全面:更多介绍


<3>内置变量

除了自定义的变量,也有cmake自身内置的一些变量。

例如:

CMAKE_CURRENT_SOURCE_DIR

[当前CMakeLists.txt文件所在的目录路径]

EXECUTABLE_OUTPUT_PATH

[编译执行完毕生成的可执行文件存储路径]

LIBRARY_OUTPUT_PATH

[编译执行完毕生成的库文件存储路径]


还有其他的变量介绍,可以看这位博主的文章:更多介绍


<4>控制语句

比如以下if语句,根据对应路径目录是否存在决定不同的操作。

if (EXISTS "./source/gamesrc")
	SET(LOGIC_INCLDE_1 ./source/gamesrc)
else()
	SET(LOGIC_INCLDE_1 ./gamesrc)
endif()


最后,写一点shell脚本中用的东西:

local DirName=$(basename `pwd`)  [获取当前目录名称,写起来比较简洁,挺好用的]


猜你喜欢

转载自blog.csdn.net/Vis_Stu/article/details/78275957