cmake常用语法介绍

使用cmake编译程序

cd /path/of/CMakeList.txt

cmake .

make

make install

 

语法

1. LINK_DIRECTORIES

查找动态库路径,相当于Makefile的-L选项,且该方法必须在ADD_LIBRARY和ADD_EXECUTABLE之前

 

2. 链接静态库

ADD_LIBRARY(curl STATIC IMPORTED)

SET_TARGET_PROPERTIES(curl PROPERTIES IMPORTED_LOCATION /path/to/libcurl.a)

TARGET_LINK_LIBRARIES(${PAORJUECT_NAME} PRIVATE curl)

注意:

1) 某些时候TARGET_LINK_LIBRARIES需要在中间 增加PRIVATE这个关键字,需要配合上下文来确定

2) TARGET_LINK_LIBRARIES必须在ADD_LIBRARY和ADD_EXECUTABLE之后

 

3. 链接动态库

LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib) #添加动态连接库的路径

TARGET_LINK_LIBRARIES(${PROJECT_NAME} curl)

 

4. 头文件目录

INCLUDE_DIRECTORIES(/path/to/include/dir1 /path/to/include/dir2)

 

5. 编译静态库、动态库

ADD_LIBRARY(${TARGET} SHARED ${DIR_SRCS})

ADD_LIBRARY(${TARGET} STATIC ${DIR_SRCS})

注意:

1) 一个CMakeLists.txt里面不能设置两个名称一样的ADD_LIBRARY

2) 如果要同时编译静态库跟动态库,且希望静态库和动态库名称一样时(libxxx.so和libxxx.a而不是libxxx.so和libyyy.a),可以这样写

ADD_LIBRARY(${TARGET} SHARED ${DIR_SRCS})

ADD_LIBRARY(${TARGET}_static STATIC ${DIR_SRCS})

#set static library name

SET_TARGET_PROPERTIES(${TARGET}_static PROPERTIES OUTPUT_NAME ${TARGET})

# cmake在构建一个新的target时,会尝试清理掉其他使用这个名字的库,

# 因此,在构建libhello.a时,就会清理掉libhello.so.

# 为了回避这个问题,设置CLEAN_DIRECT_OUTPUT属性为1。

set_target_properties(${TARGET} PROPERTIES CLEAN_DIRECT_OUTPUT 1)

set_target_properties(${TARGET}_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)

 

6. CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH

注意:这两个是环境变量而不是 cmake 变量。

使用方式:CMAKE_INCLUDE_PATH=/home/include cmake .

 

7. FIND_LIBRARY

注意:尽量不要使用该方法。这个方法最终翻译成-rpath选项,会指定目标文件在该绝对路径下查找指定的动态库

 

8. install

安装可执行文件

INSTALL(TARGETS ${TARGET}
                RUNTIME DESTINATION bin
)

安装库文件

INSTALL(TARGETS ${TARGET} ${TARGET}_static #关键字TARGETS后跟多个目标文件,后面再描述每一个目标文件的执行方法

LIBRARY DESTINATION lib #关键字LIBRARY表示目标文件是动态库,复制到${CMAKE_INSTALL_PREFIX}/lib目录

ARCHIVE DESTINATION lib #关键字ARCHIVE表示目标文件是静态库,复制到${CMAKE_INSTALL_PREFIX}/lib目录

)

安装目录下的文件

INSTALL(DIRECTORY "${OUTPUT_HEADER_FILES}/" #关键字DIRECTORY表示复制目录,后面是源目录,如果源目录最后带'/',表示把源目录下的文件复制到目标地址,如果没有,表示把源目录复制到目标地址

DESTINATION include #关键字DESTINATION表示目标地址,完整的路径是${CMAKE_INSTALL_PREFIX}/include

FILES_MATCHING PATTERN "*.h" #关键字FILES_MATCHING表示只复制源目录下*.h的文件到目标地址

)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值