老板合作网站开发,大鹏教育平面设计官网,麒贺丝网做的网站优化,必应搜索国际版编译工具#xff1a;CMake#xff08;八#xff09; | cmake 常用指令 基本指令 基本指令
ADD_DEFINITIONS向 C/C编译器添加-D 定义#xff0c;比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)#xff0c;参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end… 编译工具CMake八 | cmake 常用指令 基本指令 基本指令
ADD_DEFINITIONS向 C/C编译器添加-D 定义比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #endif这个代码块就会生效。 如果要添加其他的编译器开关可以通过 CMAKE_C_FLAGS 变量和 CMAKE_CXX_FLAGS 变量设置。
ADD_DEPENDENCIES定义 target 依赖的其他 target确保在编译本 target 之前其他的 target 已经被构建。ADD_DEPENDENCIES(target-name depend-target1depend-target2 ...)
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 来执行测试了。
AUX_SOURCE_DIRECTORY基本语法是AUX_SOURCE_DIRECTORY(dir VARIABLE)作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中这个指令临时被用来自动构建源文件列表。因为目前 cmake 还不能自动发现新添加的源文件。比如AUX_SOURCE_DIRECTORY(. SRC_LIST) ADD_EXECUTABLE(main ${SRC_LIST})也可以通过后面提到的 FOREACH 指令来处理这个 LIST
CMAKE_MINIMUM_REQUIRED其语法为 CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])比如 CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR)如果 cmake 版本小与 2.5则出现严重错误整个过程中止。
EXEC_PROGRAM在 CMakeLists.txt 处理过程中执行命令并不会在生成的 Makefile 中执行。具体语法为
EXEC_PROGRAM(Executable [directory in which to run]
[ARGS arguments to executable]
[OUTPUT_VARIABLE var]
[RETURN_VALUE var])用于在指定的目录运行某个程序通过 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 语句后面的控制指令会提到。
FILE 文件操作指令基本语法为:
FILE(WRITE filename message to write... )
FILE(APPEND filename message to write... )
FILE(READ filename variable)
FILE(GLOB
expressions]...)
variable [RELATIVE path] [globbing
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)这里的语法都比较简单不在展开介绍了。
INCLUDE 用来载入 CMakeLists.txt 文件也用于载入预定义的 cmake 模块.
INCLUDE(file1 [OPTIONAL])
INCLUDE(module [OPTIONAL])OPTIONAL 参数的作用是文件不存在也不会产生错误。 你可以指定载入一个文件如果定义的是一个模块那么将在 CMAKE_MODULE_PATH 中搜索这个模块并载入。 载入的内容将在处理到 INCLUDE 语句是直接执行。