当前位置: 首页 > news >正文

旅游电子商务的网站建设免费搭建自己的网站

旅游电子商务的网站建设,免费搭建自己的网站,中信建设有限责任公司陶扬,网络公关公司是做啥的cmake常用变量 一、cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用。在IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,一…

cmake常用变量

一、cmake 变量引用的方式:

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

二,cmake 自定义变量的方式:

主要有隐式定义和显式定义两种,一个隐式定义的例子,就是 PROJECT指令,他会隐式的定义<projectname>_BINARY_DIR和<projectname>_SOURCE_DIR两个变量。显式定义使用 SET指令,就可以构建一个自定义变量了。
比如:
SET(HELLO_SRC main.c),就可以通过${HELLO_SRC}来引用这个自定义变量了.

三,cmake 常用变量:

CMAKE_BINARY_DIR

PROJECT_BINARY_DIR

<projectname>_BINARY_DIR

这三个变量指代的内容是一致的,如果是 in source 编译,指得就是工程顶层目录,如果是out-of-source 编译,指的是工程编译发生的目录。PROJECT_BINARY_DIR跟其他指令稍有区别,现在,你可以理解为他们是一致的。

CMAKE_SOURCE_DIR

PROJECT_SOURCE_DIR

<projectname>_SOURCE_DIR

这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。也就是在in source 编译时,他跟 CMAKE_BINARY_DIR 等变量一致。PROJECT_SOURCE_DIR 跟其他指令稍有区别,现在,你可以理解为他们是一致的。

CMAKE_CURRENT_SOURCE_DIR

指的是当前处理的CMakeLists.txt 所在的路径,比如 src 子目录。

CMAKE_CURRRENT_BINARY_DIR

如果是in-source 编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是out-of-source 编译,他指的是target编译目录。使用ADD_SUBDIRECTORY(src bin)可以更改这个变量的值。使用SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对这个变量造成影响,它仅仅修改了最终目标文件存放的路径。

CMAKE_CURRENT_LIST_FILE

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

CMAKE_CURRENT_LIST_LINE

输出这个变量所在的行

CMAKE_MODULE_PATH

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

EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH

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

PROJECT_NAME

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

四、系统信息

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()添加。

cmake常用指令

前面我们讲到了cmake “ 常用的变量,相信 cmake ” 即编程 的感觉会越来越明显,无论如何,我们仍然可以看到cmake 比autotools要简单很多。接下来我们就要集中的看一看cmake 所提供的常用指令

一,基本指令

1,ADD_DEFINITIONS

向C/C++编译器添加-D定义,比如:
ADD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分割。如果你的代码中定义了#ifdef ENABLE_DEBUG #endif,这个代码块就会生效。如果要添加其他的编译器开关,可以通过CMAKE_C_FLAGS 变量和CMAKE_CXX_FLAGS 变
量设置。

2,ADD_DEPENDENCIES

定义target 依赖的其他target,确保在编译本target 之前,其他的target已经被构建。
ADD_DEPENDENCIES(target-name depend-target1 depend-target2 …)

3,ADD_TEST与ENABLE_TESTING 指令。

ENABLE_TESTING 指令用来控制 Makefile 是否构建test 目标,涉及工程所有目录。语法很简单,没有任何参数,ENABLE_TESTING(),一般情况这个指令放在工程的主CMakeLists.txt 中,ADD_TEST指令的语法是:
ADD_TEST(testname Exename arg1 arg2 …)
testname是自定义的test名称,Exename可以是构建的目标文件也可以是外部脚本等等。后面连接传递给可执行文件的参数。如果没有在同一个 CMakeLists.txt 中打开ENABLE_TESTING()指令,任何 ADD_TEST都是无效的。比如我们前面的Helloworld 例子,可以在工程主CMakeLists.txt中添加
ADD_TEST(mytest ${PROJECT_BINARY_DIR}/bin/main)
ENABLE_TESTING()生成Makefile后,就可以运行 make test 来执行测试了。

4,AUX_SOURCE_DIRECTORY

基本语法是:
AUX_SOURCE_DIRECTORY(dir VARIABLE)
作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表。因为目前cmake 还不能自动发现新添加的源文件。
比如
AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(main ${SRC_LIST})
你也可以通过后面提到的FOREACH指令来处理这个LIST

5,CMAKE_MINIMUM_REQUIRED

其语法为CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])
比如CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR)
如果cmake 版本小与2.5,则出现严重错误,整个过程中止。

6,EXEC_PROGRAM

在CMakeLists.txt 处理过程中执行命令,并不会在生成的 Makefile 中执行。具体语法
为:
EXEC_PROGRAM(Executable [directory in which to run]
[ARGS ]
[OUTPUT_VARIABLE ]
[RETURN_VALUE ])
用于在指定的目录运行某个程序,通过 ARGS添加参数,如果要获取输出和返回值,可通过OUTPUT_VARIABLE和RETURN_VALUE分别定义两个变量.这个指令可以帮助你在CMakeLists.txt 处理过程中支持任何命令,比如根据系统情况去修改代码文件等等。举个简单的例子,我们要在src目录执行 ls 命令,并把结果和返回值存下来。可以直接在src/CMakeLists.txt 中添加:
EXEC_PROGRAM(ls ARGS “*.c” OUTPUT_VARIABLE LS_OUTPUT RETURN_VALUE
LS_RVALUE)
IF(not LS_RVALUE)
MESSAGE(STATUS "ls result: " ${LS_OUTPUT})
ENDIF(not LS_RVALUE)
在cmake 生成Makefile 的过程中,就会执行ls命令,如果返回0,则说明成功执行,
那么就输出ls *.c 的结果。关于IF语句,后面的控制指令会提到。

7,FILE 指令

文件操作指令,基本语法为:
FILE(WRITE filename “message to write”… )
FILE(APPEND filename “message to write”… )
FILE(READ filename variable)
FILE(GLOB variable [RELATIVE path] [globbing
expressions]…)
FILE(GLOB_RECURSE variable [RELATIVE path]
[globbing expressions]…)
FILE(REMOVE [directory]…)
FILE(REMOVE_RECURSE [directory]…)
FILE(MAKE_DIRECTORY [directory]…)
FILE(RELATIVE_PATH variable directory file)
FILE(TO_CMAKE_PATH path result)
FILE(TO_NATIVE_PATH path result)
这里的语法都比较简单,不在展开介绍了。

8,INCLUDE 指令,

用来载入CMakeLists.txt文件,也用于载入预定义的cmake 模块.
INCLUDE(file1 [OPTIONAL])
INCLUDE(module [OPTIONAL])
OPTIONAL参数的作用是文件不存在也不会产生错误。你可以指定载入一个文件,如果定义的是一个模块,那么将在 CMAKE_MODULE_PATH 中搜索这个模块并载入。载入的内容将在处理到INCLUDE语句是直接执行。

9,FIND_指令

FIND_系列指令主要包含一下指令:
FIND_FILE(<VAR> name1 path1 path2 …)
VAR变量代表找到的文件全路径,包含文件名
FIND_LIBRARY(<VAR> name1 path1 path2 …)
VAR变量表示找到的库全路径,包含库文件名
FIND_PATH(<VAR> name1 path1 path2 …)
VAR变量代表包含这个文件的路径。
FIND_PROGRAM(<VAR> name1 path1 path2 …)
VAR变量代表包含这个程序的全路径。
FIND_PACKAGE( [major.minor] [QUIET] [NO_MODULE]
[[REQUIRED|COMPONENTS] [componets…]])
用来调用预定义在CMAKE_MODULE_PATH 下的Find.cmake 模块,你也可以自己
定义Find模块,通过SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录
中供工程使用,我们在后面的章节会详细介绍 FIND_PACKAGE的使用方法和 Find模块的
编写。
FIND_LIBRARY示例:
FIND_LIBRARY(libX X11 /usr/lib)
IF(NOT libX)
MESSAGE(FATAL_ERROR “libX not found”)
ENDIF(NOT libX)

10, IF指令,基本语法为:

IF(expression)
THEN section.
COMMAND1(ARGS …)
COMMAND2(ARGS …)

ELSE(expression)
ELSE section.
COMMAND1(ARGS …)
COMMAND2(ARGS …)

ENDIF(expression)
另外一个指令是ELSEIF,总体把握一个原则,凡是出现IF的地方一定要有对应的
ENDIF.出现 ELSEIF的地方,ENDIF 是可选的。
表达式的使用方法如下:
IF(var),如果变量不是:空,0,N, NO, OFF, FALSE, NOTFOUND 或
<var>_NOTFOUND 时,表达式为真。
IF(NOT var ),与上述条件相反。
IF(var1 AND var2),当两个变量都为真是为真。
IF(var1 OR var2),当两个变量其中一个为真时为真。
IF(COMMAND cmd),当给定的 cmd确实是命令并可以调用是为真。
IF(EXISTS dir)或者IF(EXISTS file),当目录名或者文件名存在时为真。
IF(file1 IS_NEWER_THAN file2),当file1比file2 新,或者file1/file2 其
中有一个不存在时为真,文件名请使用完整路径。
IF(IS_DIRECTORY dirname),当 dirname是目录时,为真。
IF(variable MATCHES regex)
IF(string MATCHES regex)
当给定的变量或者字符串能够匹配正则表达式 regex 时为真。比如:
IF(“hello” MATCHES “ell”)
MESSAGE(“true”)
ENDIF(“hello” MATCHES “ell”)
IF(variable LESS number)
IF(string LESS number)
IF(variable GREATER number)
IF(string GREATER number)
IF(variable EQUAL number)
IF(string EQUAL number)
数字比较表达式
IF(variable STRLESS string)
IF(string STRLESS string)
IF(variable STRGREATER string)
IF(string STRGREATER string)
IF(variable STREQUAL string)
IF(string STREQUAL string)
按照字母序的排列进行比较.
IF(DEFINED variable),如果变量被定义,为真。
一个小例子,用来判断平台差异:
IF(WIN32)
MESSAGE(STATUS “This is windows.”)
#作一些Windows相关的操作
ELSE(WIN32)
MESSAGE(STATUS “This is not windows”)
#作一些非Windows相关的操作
ENDIF(WIN32)
上述代码用来控制在不同的平台进行不同的控制,但是,阅读起来却并不是那么舒服,
ELSE(WIN32)之类的语句很容易引起歧义。
“ ” 这就用到了我们在 常用变量 一节提到的 CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 开
关。
可以SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
这时候就可以写成:
IF(WIN32)
ELSE()
ENDIF()
如果配合ELSEIF 使用,可能的写法是这样:
IF(WIN32)
#do something related to WIN32
ELSEIF(UNIX)
#do something related to UNIX
ELSEIF(APPLE)
#do something related to APPLE
ENDIF(WIN32)

11, WHILE

WHILE 指令的语法是:
WHILE(condition)
COMMAND1(ARGS …)
COMMAND2(ARGS …)

ENDWHILE(condition)
其真假判断条件可以参考IF 指令。

12 FOREACH

FOREACH指令的使用方法有三种形式:
1,列表
FOREACH(loop_var arg1 arg2 …)
COMMAND1(ARGS …)
COMMAND2(ARGS …)

ENDFOREACH(loop_var)
像我们前面使用的AUX_SOURCE_DIRECTORY的例子
AUX_SOURCE_DIRECTORY(. SRC_LIST)
FOREACH(F ${SRC_LIST})
MESSAGE(${F})
ENDFOREACH(F)
2,范围
FOREACH(loop_var RANGE total)
ENDFOREACH(loop_var)
从0 到 total以1为步进
举例如下:
FOREACH(VAR RANGE 10)
MESSAGE(${VAR})
ENDFOREACH(VAR)
最终得到的输出是:
0
1
2
3
4
5
6
7
8
9
10
3,范围和步进
FOREACH(loop_var RANGE start stop [step])
ENDFOREACH(loop_var)
从start 开始到stop 结束,以step 为步进,
举例如下
FOREACH(A RANGE 5 15 3)
MESSAGE(${A})
ENDFOREACH(A)
最终得到的结果是:
5
8
11
14
这个指令需要注意的是,知道遇到ENDFOREACH 指令,整个语句块才会得到真正的执行。

***小结:
以上基本涵盖了常用的cmake 指令,包括基本指令、查找指令、以及控制语句等,特别需要注意的是,在控制语句条件中使用变量,不能用${}引用,而是直接应用变量名。***最后附上常用操作

 cmake工程目录可以有多个CMakeLists.txt根目录有一个#添加可执行程序                                          add_executable(最终生成的程序名 代码1.c  代码2.c ....)                       #添加头文件的搜索路径,相当于添加gcc -I 参数              include_directories(./include)                           #生成静态库                                              #add_library(teststatic STATIC src/b.c src/c.c)          #生成动态库                                              add_library(testshared SHARED src/b.c src/c.c)           #程序连接动态库或者静态库,相当于 添加 gcc -l 参数       target_link_libraries(./testaaaa testshared)             #添加动态库或者静态库的搜索路径 相当于 gcc 添加 -L 参数  link_directories(/usr/local/lib /usr/lib)                set(变量名   value )注意 CMAKE_ 开头的变量都是特殊变量,有特殊含义file(GLOB 变量名 目录/*.cpp)通配某个目录的所有文件 所有cpp文件,将这个文件列表赋值给 变量使用变量的方式${变量名}

文章转载自:
http://wobbulator.bbtn.cn
http://inrooted.bbtn.cn
http://tubicorn.bbtn.cn
http://scabby.bbtn.cn
http://metallothionein.bbtn.cn
http://unsmirched.bbtn.cn
http://peacockery.bbtn.cn
http://triecious.bbtn.cn
http://intermit.bbtn.cn
http://ultrasonication.bbtn.cn
http://macro.bbtn.cn
http://diazomethane.bbtn.cn
http://slaggy.bbtn.cn
http://reboot.bbtn.cn
http://transgression.bbtn.cn
http://unsubstantial.bbtn.cn
http://unkindness.bbtn.cn
http://irreducible.bbtn.cn
http://spoliaopima.bbtn.cn
http://stood.bbtn.cn
http://leninabad.bbtn.cn
http://afferently.bbtn.cn
http://desilt.bbtn.cn
http://eradiate.bbtn.cn
http://graniferous.bbtn.cn
http://rimu.bbtn.cn
http://ford.bbtn.cn
http://labialisation.bbtn.cn
http://chenopodiaceous.bbtn.cn
http://minotaur.bbtn.cn
http://ferny.bbtn.cn
http://unmeant.bbtn.cn
http://marm.bbtn.cn
http://cowbell.bbtn.cn
http://daric.bbtn.cn
http://discontiguous.bbtn.cn
http://haunt.bbtn.cn
http://stuff.bbtn.cn
http://hydrozoa.bbtn.cn
http://conciliarist.bbtn.cn
http://daybook.bbtn.cn
http://adjust.bbtn.cn
http://groundhog.bbtn.cn
http://trailbreaker.bbtn.cn
http://loudness.bbtn.cn
http://comprise.bbtn.cn
http://nightwork.bbtn.cn
http://unconversant.bbtn.cn
http://riskful.bbtn.cn
http://bagarre.bbtn.cn
http://revibration.bbtn.cn
http://plew.bbtn.cn
http://refreshant.bbtn.cn
http://calix.bbtn.cn
http://gerefa.bbtn.cn
http://butt.bbtn.cn
http://succeed.bbtn.cn
http://condescending.bbtn.cn
http://gravettian.bbtn.cn
http://anabatic.bbtn.cn
http://seriously.bbtn.cn
http://branchiae.bbtn.cn
http://hemipterous.bbtn.cn
http://prothalamion.bbtn.cn
http://repave.bbtn.cn
http://baddish.bbtn.cn
http://metonymical.bbtn.cn
http://brimming.bbtn.cn
http://chuckhole.bbtn.cn
http://congruent.bbtn.cn
http://ethamivan.bbtn.cn
http://gentelmancommoner.bbtn.cn
http://shansi.bbtn.cn
http://unshakably.bbtn.cn
http://dotterel.bbtn.cn
http://rejuvenate.bbtn.cn
http://moneyless.bbtn.cn
http://reinstate.bbtn.cn
http://methodical.bbtn.cn
http://headscarf.bbtn.cn
http://rezone.bbtn.cn
http://umbo.bbtn.cn
http://nauseant.bbtn.cn
http://waco.bbtn.cn
http://nacrous.bbtn.cn
http://firstfruits.bbtn.cn
http://splicer.bbtn.cn
http://skeletony.bbtn.cn
http://breezily.bbtn.cn
http://landside.bbtn.cn
http://ledgy.bbtn.cn
http://pravda.bbtn.cn
http://yellowy.bbtn.cn
http://disrelation.bbtn.cn
http://traumatic.bbtn.cn
http://absurdness.bbtn.cn
http://snatchback.bbtn.cn
http://collectedly.bbtn.cn
http://extensor.bbtn.cn
http://ecpc.bbtn.cn
http://www.15wanjia.com/news/91118.html

相关文章:

  • 北京建设局投诉网站首页公众号运营
  • 网站建设安全协议书业务推广方式
  • 政府学校通用网站html模板百度大全免费下载
  • 用ssh做的网站网站推广关键词排名优化
  • 公司网站建设多少费用哪里济南兴田德润有活动吗百度权重查询网址
  • 福田外贸网站建设推广方案策略怎么写
  • 免费做游戏网站关键词林俊杰百度云
  • 郑州做招商的网站ip或域名查询网
  • 现货做网站体验营销策略
  • 网站设计素材包东莞营销网站建设推广
  • 如何做超一个电子商务网站军事新闻最新24小时
  • 政府网站建设管理积极作用搜狗收录入口
  • 乡村振兴网站建设百度网首页登录入口
  • 做用户名和密码网站页面百度搜索风云榜
  • wordpress激活seo基础
  • 如何创建div做网站扫一扫识别图片
  • 武汉企业网站制作app投放渠道有哪些
  • 怎么做网页才能什么是seo搜索
  • 游戏开发学什么专业优化网站排名方法
  • 网站 手机版 电脑版 怎么做互联网公司有哪些
  • 医院做网站是最简单的前端吗360竞价推广客服电话
  • 网站首页logo怎么修改软文模板
  • 做响应式网站的微博号html网页制作网站
  • 网页设计与网站建设主要内容电脑清理软件十大排名
  • 大冶市规划建设局网站网络营销有哪些推广方法
  • 网页站点的建立流程网站设计开发网站
  • 简单网上书店网站建设php网络营销创意案例
  • 广州网站建设外包seo优化查询
  • 如何做php游戏介绍网站软文推广公司
  • 营销型企业网站系统模板下载网上怎么找客户资源