cmake 基本命令

1 # CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

2 # 项目信息
project (Demo2)

3 # 查找当前目录下的所有源文件并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

4 # 工程生成目标文件
add_executable(Demo ${DIR_SRCS})

5 # 设置要链接的库文件 TARGET_LINK_LIBRARIES
target_link_libraries(Demo hello)
target_link_libraries(myProject comm) # 连接libhello.so库,默认优先链接动态库
target_link_libraries(myProject libcomm.a) # 显示指定链接静态库
target_link_libraries(myProject libcomm.so) # 显示指定链接动态库

6 # 生成静态链接库和动态库
ADD_LIBRARY(libname [SHARED|STATIC] source1 source2 ... sourceN)
add_library (hello STATIC ${LIBHELLO_SRC}) #生成静态链接库
add_library (hello SHARED ${LIBHELLO_SRC}) #生成动态链接库

7 #设置lib别名,所以,希望 "hello_static" 在输出时,不是"hello_static",而是以"hello"的名字显示,故设置如下
SET_TARGET_PROPERTIES (hello_static PROPERTIES OUTPUT_NAME "hello")
GET_TARGET_PROPERTY (OUTPUT_VALUE hello_static OUTPUT_NAME) #获取值

8 #添加头文件目录INCLUDE_DIRECTORIES,相当于g++ -I
include_directories(../../../thirdparty/comm/include)

9 #添加需要链接的库文件目录LINK_DIRECTORIES,它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。
link_directories(directory1 directory2 ...)
例:link_directories("/home/server/third/lib")

10 #添加需要链接的库文件路径LINK_LIBRARIES
语法:
link_libraries(library1 <debug | optimized> library2 ...)
复制代码
# 直接是全路径
link_libraries(“/home/server/third/lib/libcommon.a”)
# 下面的例子,只有库名,cmake会自动去所包含的目录搜索
link_libraries(iconv)
# 传入变量
link_libraries(${RUNTIME_LIB})
# 也可以链接多个
link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

11 用来设置输出的名称
SET_TARGET_PROPERTIES (target1 target2 ...PROPERTIES prop1 value1 prop2 value2 ...)
SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1) 实现动态库版本号 VERSION指代动态库版本,SOVERSION指代API版本。
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") 将libhello_static.a库名称输出为libhello.a

12 获取属性值
GET_TARGET_PROPERTY (VAR target property) VAR:变量 target:目标 property:属性
GET_TARGET_PROPERTY (OUTPUT_VALUE hello_static OUTPUT_NAME)

13 打印cmake时信息
MESSAGE (STATUS "This is the hello_static OUTPUT_NAME: " ${OUTPUT_VALUE})

猜你喜欢

转载自www.cnblogs.com/wangjian8888/p/10710690.html