cmake 常用变量和常用环境变量

cmake 常用变量和常用环境变量

一.cmake 变量引用的方式

  前面我们已经提到了,使用${ }进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${ }取值.

二.cmake 自定义变量的方式

  主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义“<projectname>_BINARY_DIR ”和“<projectname>_SOURCE_DIR ”两个变量。

使用 SET 指令,就可以构建一个自定义变量了。比如:

SET(HELLO_SRC    main.SOURCE_PATH)    #main.SOURCE_PATH代表main.cpp的路径

这样就可以通过${HELLO_SRC}来引用这个自定义变量了.

三.cmake 常用变量

1.CMAKE_BINARY_DIR

   PROJECT_BINARY_DIR

   <projectname>_BINARY_DIR

  这三个变量指代的内容是一致的,如果是内部编译,指得就是工程顶层目录;如果是外部编译,指的是工程编译发生的目录。

PROJECT_BINARY_DIR 跟其他指令稍有区别,现在,你可以理解为他们是一致的。

2.CMAKE_SOURCE_DIR

   PROJECT_SOURCE_DIR

   <projectname>_SOURCE_DIR

  这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。也就是在内部编译时,他跟 CMAKE_BINARY_DIR 等变量一致。

PROJECT_SOURCE_DIR 跟其他指令稍有区别,现在,你可以理解为他们是一致的。

3.CMAKE_CURRENT_SOURCE_DIR

  指的是当前处理的 CMakeLists.txt 所在的路径,比如上面我们提到的 src 子目录。

4.CMAKE_CURRRENT_BINARY_DIR

  如果是内部编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是外部编译,他指的是 target 编译目录。

使用我们上面提到的 ADD_SUBDIRECTORY(src   bin)可以更改这个变量的值。

使用 SET(EXECUTABLE_OUTPUT_PATH    <新路径>)并不会对这个变量造成影响,它仅仅修改了最终目标文件存放的路径。

5.CMAKE_CURRENT_LIST_FILE

  输出调用这个变量的 CMakeLists.txt 的完整路径

6.CMAKE_CURRENT_LIST_LINE

  输出这个变量所在的行

7.CMAKE_MODULE_PATH

  这个变量用来定义自己的 cmake 模块所在的路径。如果你的工程比较复杂,有可能会自己编写一些 cmake 模块,这些 cmake 模块是随你的工程发布的,为了让 cmake 在处理CMakeLists.txt 时找到这些模块,你需要通过 SET 指令,将自己的 cmake 模块路径设置一下。

比如:

SET(CMAKE_MODULE_PATH    ${PROJECT_SOURCE_DIR}/cmake)

#  ${PROJECT_SOURCE_DIR}为绝对路径

#   /cmake 为相对路径

这时候你就可以通过 INCLUDE 指令来调用自己的模块了。

8.EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH

  分别用来重新定义最终结果的存放目录。

9.PROJECT_NAME

  返回通过 PROJECT 指令定义的项目名称。

四.cmake 调用环境变量的方式

使用$ENV{NAME}指令就可以调用系统的环境变量了。

比如:MESSAGE(STATUS “HOME   dir: $ENV{HOME}”)

设置环境变量的方式是:

SET(ENV{变量名}   值)

1.CMAKE_INCLUDE_CURRENT_DIR

  自动添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 到当前处理的 CMakeLists.txt。相当于在每个 CMakeLists.txt 加入:

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

2.CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE

  将工程提供的头文件目录始终至于系统头文件目录的前面,当你定义的头文件确实跟系统发生冲突时可以提供一些帮助。

3.CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH

  如果头文件和库文件没有存放在常规路径(/usr/include, /usr/local/include 等),则可以通过这些变量进行设置。

五.系统信息

1.CMAKE_MAJOR_VERSION           CMAKE 主版本号,比如 2.4.6 中的 2

2.CMAKE_MINOR_VERSION            CMAKE 次版本号,比如 2.4.6 中的 4

3.CMAKE_PATCH_VERSION            CMAKE 补丁等级,比如 2.4.6 中的 6

4.CMAKE_SYSTEM                           系统名称,比如 Linux-2.6.22

5.CMAKE_SYSTEM_NAME               不包含版本的系统名,比如 Linux

6.CMAKE_SYSTEM_VERSION         系统版本,比如 2.6.22

7.CMAKE_SYSTEM_PROCESSOR  处理器名称,比如 i686.

8.UNIX                                                在所有的类 UNIX 平台为 TRUE,包括 OS X 和 cygwin

9.WIN32                                              在所有的 win32 平台为 TRUE,包括 cygwin

六.主要的开关选项

1.CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS

  用来控制 IF ELSE 语句的书写方式。

2.BUILD_SHARED_LIBS

  这个开关用来控制默认的库编译方式,如果不进行设置,使用ADD_LIBRARY 并没有指定库类型的情况下,默认编译生成的库都是静态库。

如果 SET(BUILD_SHARED_LIBS    ON)  后,默认生成的为动态库。

3.CMAKE_C_FLAGS

  设置 C 编译选项,也可以通过指令 ADD_DEFINITIONS()添加。

4.CMAKE_CXX_FLAGS

  设置 C++编译选项,也可以通过指令 ADD_DEFINITIONS()添加。

原文地址:https://www.cnblogs.com/guoshuai-ouc/p/cmake_variable.html

时间: 2024-08-05 22:34:06

cmake 常用变量和常用环境变量的相关文章

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 扩展 bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 # 8.6 管道符和作业控制 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170816/214503952.png?imageslim) - 管道符的命令就是把前面输出的结果交给后面的命令 ``` [[email protected] 

系统环境变量和用户环境变量

环境变量分为系统环境变量和用户环境变量. 你所说的环境变量是指系统环境变量,对所有用户起作用 而用户环境变量只对当前用户起作用. 例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登陆,在命令行输入java都会有java的帮助信息出来.而如果你在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登陆时这个变量就和不存在一样. 这个问题在linux下面就相对好理解一些,系统变量都在/etc/profile文件里面,而用户的

PATH环境变量和CLASSPATH环境变量详解

大凡装过JDK的人都知道要安装完成后要设置环境变量,可是为什么要设置环境变量呢?环境变量有什么作用? 1)PATH详解: 计算机安装JDK之后,输入“javac”“java”之类的命令是不能马上被计算机正确执行的,因为计算机不知道到哪里去找这两个命令. 计算机如何查找命令呢?Windows操作系统根据PATH环境变量来查找命令.PATH环境变量的值是一系列路径,Windows操作系统将在这一系列的路径中依次查找命令,如果能找到这个命令,则该命令是可执行的:否则将出现“‘XXX’不是内部命令或外部

Java环境变量和Android环境变量

Java环境变量和Android环境变量: JAVA_HOME D:\setup\Java\jdk1.6.0;D:\setup\Java\jdk1.7.0_55 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar ANDROID_SDK D:\setup\adt\sdk Path %JAVA_HOME%\bin;%ANDROID_SDK%\platforms;%ANDROID_SDK%\platform-tools; Andro

五周第四次课(1月11日) 8.6 管道符和作业控制 8.7/shell变量 8.8 shell变量 8.9 环境变量配置文件

五周第四次课(1月11日)8.6 管道符和作业控制8.7/shell变量8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html 关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command

Linux编程 13 (系统环境变量位置, 环境变量持久化)

一.系统环境变量位置 在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量.这篇学习怎么让环境变量的作用持久化.在此之前,先了解下系统环境变量文件会在哪些位置,当使用bash shell时,bash是如何查找环境变量位置的.下面先来介绍几个文件,这些文件叫启动文件或叫环境文件. bash检查的启动文件(环境文件)取决于你启动bash shell的方式.启动bash shell有3种方式: (1) 登录时的默认登录shell. (2) 交互式shell.

在配置环境变量时是该用系统环境变量还是用户环境变量?

环境变量分为系统环境变量和用户环境变量. 正常所说的环境变量是指系统环境变量,对所有用户起作用,而用户环境变量只对当前用户起作用,如果此电脑登入了另外个用户账号,那配置之前账号的用户环境变量就对另外个用户账号不起作用. 例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登录,在命令行(cmd)输入java都会有java的帮助信息出来.而如果你在某个用户的环境变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登录时这个变量就和不存在

Java基础(极客)——07、Java常用技巧-Java配制环境变量与常用技巧(大多都是概述,可以看视频)

1本课概要 2课程概述 3计算机语言概述 4Java入门 5JDK介绍(有用) 6设置环境变量(有用) 7编写第一个Java程序 8Java的程序结构 9Eclipse开发工具概述 10下载Eclipse(有用) 11Eclipse开发环境介绍(有用) 12创建Java项目 13给main方法的args参数赋值(有用) 14加运算 15Java的项目结构 16项目的导出 17项目的导入 18修改项目名.包名和类名 19Math类(有用) 20Java程序的书写规范 21常见错误 22常用技巧(有

gcc 添加include环境变量和lib环境变量(转载)

对所有用户有效在/etc/profile增加以下内容.只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found) #在PATH中找到可执行文件程序的路径.export PATH =$PATH:$HOME/bin #gcc找到头文件的路径C_INCLUDE_PATH=/usr/include/libxml2:/MyLibexport C_INCLUDE_PATH #g++找到头文件的路

linux shell “永久环境变量”、“临时环境变量”和&quot;普通变量&quot;之完全解读

这个年代, 大家写点书, 也无非就是为了搞点钱, 基本都是罗列一些知识点, 基本都是写给已经会了的人看的. 真正用心写书的人, 不多. 如果真正用心写书, 且站在读者的角度去写, 那就少之又少了. 关于linux shell环境变量, 我看了四本linux相关书的介绍, 结果, 没有一本书的讲解让我完全满意, 总感觉没有说清楚.所以呢, 我打算自己来写一下,如有不当指出, 请大家指正. 一. 永久环境变量(实际上属于文件, 而不属于shell, 每打开一个shell, 都会加载/导入到shell