如何使用CMake

本文用于记录个人在学习Cmake时,一些基础知识,以及以后所遇到的问题以及解决方法,仅供大家参考。

如何构建Cmake工程(准备工作):

进行外部构建,在工程目录文件下,建立build文件夹,用于存放编译过程中的过程文件;
在工程目录文件下,建立src文件夹,用于存放工程的源代码;
在工程目录文件下,建立doc文件夹,用于存放工程文档;
在工程目录文件下,添加文本文件COPYRIGHT,README;
值得注意的是,需要为任何一个子目录建立CMakeLists.txt。

如何编写CMakeLists.txt:

下面对常用指令进行介绍:
PROJECT (HELLO)
PROJECT指令的语法是:
PROJECT(projectname [CXX] [C] [Java])
你可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,默认情况表示支持所有语言。
SET(SRC_LIST main.c)
SET指令的语法是:
SET指令可以用来显式的定义变量。如果有多个源文件,也可以定义成:
SET(SRC_LIST main.c t1.c t2.c)
ADD_EXECUTABLE(hello ${SRC_LIST})
定义了这个工程会生成一个文件名为hello的可执行文件,相关的源文件是SRC_LIST中
定义的源文件列。
ADD_SUBDIRECTORY指令
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置。EXCLUDE_FROM_ALL参数的含义是将这个目录从编译过程中排除,比如,工程的example,可能就需要工程构建完成后,再进入example目录单独进行构建(当然,你也可以通过定义依赖来解决此类问题)。
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
如何安装?
1.安装COPYRIGHT/README,直接修改主工程文件CMakelists.txt,加入以下指令:
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/[目标文件夹])
2.安装doc中的hello.txt
所以我们不能直接安装整个doc目录,这里采用的方式是安装doc目录中的内容,也就是使用”doc/”在工程文件中添加
INSTALL(DIRECTORY doc/ DESTINATION share/doc/[目标文件夹])

共享库与静态库

1.建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc
向终端输出Hello World字符串。
2.安装头文件与共享库。

建立共享库:
mkdir lib
在工程目录下建立CMakeLists.txt,内容如下:

PROJECT(HELLOLIB)
ADD_SUBDIRECTORY(lib)

在lib目录下建立源文件以及头文件;
在lib目录下建立CMakeLists.txt,内容如下:

SET(LIBHELLO_SRC hello.c)
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})

建立build目录,进行编译,以在lib目录得到一个libhello.so
如果你要指定libhello.so生成的位置,可以通过在主工程文件CMakeLists.txt中修改ADD_SUBDIRECTORY(lib)指令来指定一个编译输出位置或者在lib/CMakeLists.txt中添加SET(LIBRARY_OUTPUT_PATH <路径>)来指定一个新的位置。

ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)

同时构建静态库与共享库:
SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT
1)

利用INSTALL指令进行安装,向lib/CMakeLists.txt中添加如下指令:

INSTALL(TARGETS hello hello_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
INSTALL(FILES hello.h DESTINATION include/hello)

注意,静态库要使用ARCHIVE关键字
通过:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make install

我们就可以将头文件和共享库安装到系统目录/usr/lib和/usr/include/hello中了。

如何使用安装的库?
第一步,指定库文件所在的位置:
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
第二步,将目标文件链接到库:
TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2 ...)
这个指令可以用来为target添加需要链接的共享库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值