快速学习cmake(一)

2 篇文章 0 订阅
1 篇文章 0 订阅

内部构建

PROJECT(projectname [CXX] [C] [Java]):

这个指令定义工程名称,并可指定工程支持的语言(这个指令隐式的定义了两个cmake变量:
<projectname>_BINARY_DIR以及<projectname>_SOURCE_DIR,这里就是 HELLO_BINARY_DIR和HELLO_SOURCE_DIR)

因为采用的是内部编译,两个变量目前指的都是工程所在路径/backup/cmake/t1

同时 cmake 系统也帮助我们预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR
变量,他们的值分别跟 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR 一致

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]):

用来显式的定义变量例如:SET(SRC_LIST main.c)
 

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...):

向终端输出用户定义的信息

ADD_EXECUTABLE(hello ${SRC_LIST}):

定义了这个工程会生成一个文件名为hello的可执行文件,相关的源文件是SRC_LIST中 定义的源文件列表($){}是引用变量)

外部构建

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置。EXCLUDE_FROM_ALL 参数的含义是将这个目录从编译过程中排除
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

定义二进制文件的输出路径和库的输出路径

安装:

  1.  make install DESTDIR=/tmp/test 将他安装在/tmp/test/usr/bin 目录,打包时这个方式经常被使用。
  2. ./configure --prefix=/usr/local(prefix---前缀)
  3. cmake -D CMAKE_INSTALL_PREFIX=/usr(CMAKE_INSTALL_PREFIX 变量类似于 configure 脚本的 –prefix

cmake的安装指令(INSTALL):

1.目标文件的安装

INSTALL(TARGETS targets...
       [[ARCHIVE|LIBRARY|RUNTIME]
            [DESTINATION <dir>]
            [PERMISSIONS permissions...]
            [CONFIGURATIONS [Debug|Release|...]]

            [COMPONENT <component>]
            [OPTIONAL]
          ] [...])

例如:INSTALL(TARGETS myrun mylib mystaticlib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION libstatic
)

TARGETS是目标文件,可以是静态库 / 动态库 / 可执行文件

DESTINATION定义安装路径,如果路径以/开头,那么指的是绝对路径,这时CMAKE_INSTALL_PREFIX 其实就无效了。如果你希望使用 CMAKE_INSTALL_PREFIX 来定义安装路径,就要写成相对路径,即不要以/开头,那么安装后的路径就${CMAKE_INSTALL_PREFIX}/<DESTINATION 定义的路径>

2.普通文件的安装

INSTALL(FILES files... DESTINATION <dir>
      [PERMISSIONS permissions...]
      [CONFIGURATIONS [Debug|Release|...]]
      [COMPONENT <component>]
      [RENAME <name>] [OPTIONAL])

PERMISSIONS是指定访问权限,一般文件默认为OWNER_WRITE, OWNER_READ, GROUP_READ,和 WORLD_READ即 644 权限。脚本文件默认为OWNER_EXECUTE, GROUP_EXECUTE, 和 WORLD_EXECUTE,即 755 权限

3.目录的安装

INSTALL(DIRECTORY dirs... DESTINATION <dir>
       [FILE_PERMISSIONS permissions...]
       [DIRECTORY_PERMISSIONS permissions...]
       [USE_SOURCE_PERMISSIONS]
       [CONFIGURATIONS [Debug|Release|...]]
       [COMPONENT <component>]
       [[PATTERN <pattern> | REGEX <regex>]
       [EXCLUDE] [PERMISSIONS permissions...]] [...])
DIRECTORY 后面连接的是所在 Source 目录的相对路径
例如:INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj
PATTERN "CVS" EXCLUDE
PATTERN "scripts/*"
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ)

     将 icons 目录安装到 <prefix>/share/myproj,将 scripts/中的内容安装到<prefix>/share/myproj不包含目录名为 CVS 的目录对于 scripts/*文件指定权限为 OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ


相关变量:

ARCHIVE---------静态库

LIBRARY---------动态库

RUNTIME---------可执行目标二进制

<projectname>_BINARY_DIR---------隐式定义的可执行文件目录

<projectname>_SOURCE_DIR---------隐式定义的源代码文件目录

EXECUTABLE_OUTPUT_PATH---------二进制文件输出路径

LIBRARY_OUTPUT_PATH---------库的输出路径

CMAKE_INSTALL_PREFIX---------编译目录前缀

TARGETS---------目标文件

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值