[...])
file(READ <filename> <out-var> [...])
READ 会读取文件的内容并将其存入到变量中
file(STRINGS <filename> <out-var> [...])
STRINGS 从文件中解析出ASCII字符串列表并存储在变量中
file(WRITE filename "message towrite"... )
WRITE 将一则信息写入文件’filename’中,如果该文件存在,它会覆盖它,如果不存在,它会创建该文件。
file(APPEND filename "message to write"... )
APPEND 如同WRITE,区别在于它将信息内容追加到文件末尾。
file(MAKE_DIRECTORY [directory1 directory2 ...])
MAKE_DIRECTORY在指定目录处创建子目录,如果它们的父目录不存在,也会创建它们的父目录。
file(RELATIVE_PATH variable directory file)
RELATIVE_PAT推断出指定文件相对于特定目录的路径。
file(TO_CMAKE_PATH path result)
TO_CMAKE_PATH会将路径转换成cmake风格的路径表达形式。
file(GLOB variable [RELATIVE path] [globbingexpressions]...)
GLOB 会产生一个由所有匹配globbing表达式的文件组成的列表,并将其保存到变量中。Globbing 表达式与正则表达式类似,但更简单。
测试的例子:
file(WRITE test1.txt "Some messages to Write\n" )
file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS )
file(GLOB SOURCES “*.cu” “*.cpp” “*.c” “*.h”)
file(APPEND test1.txt "Another message to write\n")
file(STRINGS test1.txt PARSED_STRINGS)
message(STATUS "\n strings of test1.txt is: \n ${PARSED_STRINGS}")
file(GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.*")
message(STATUS "files: ${files}")
file(MAKE_DIRECTORY dir1 dir2)
file(RENAME dir2 dir3)
file(REMOVE dir3)
file(REMOVE_RECURSE dir3)
file(RELATIVE_PATH relative_path ${PROJECT_SOURCE_DIR}
file(COPY test1.txt DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/dir1)
file(INSTALL test1.txt DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/dir1)
file — CMake 3.14.7 Documentation
CMakeFile命令之file_P.TAN的博客-CSDN博客_cmake file
The release was packaged with CPack which is included as part of the release. The .sh files are self extracting gziped tar files. To install a .sh file, run it with /bin/sh and follow the directions. The OS-machine.tar.gz files are gziped tar files of the install tree. The OS-machine.tar.Z files are compressed tar files of the install tree. The tar file distributions can be untared in any directory. They are prefixed by the version of CMake. For example, the Linux-x86_64 tar file is all under the directory cmake–Linux-x86_64. This prefix can be removed as long as the share, bin, man and doc directories are moved relative to each other. To build the source distributions, unpack them with zip or tar and follow the instructions in Readme.txt at the top of the source tree
本资源包含两个样例框架makefile+CMakefile:
已经写好了初始化的makefile和CMakeLists.txt文件,只需要在框架的基础上添加自己的需求就可以了,但是最基础的make和cmake的语法还是需要懂的,才能写好框架,提高自己项目的效率。
希望这两个小框架能对大家有用,后续还会继续更新框架,争取让框架更加的完美。
CMakeJSON
CMakeJSON是用于设置项目,测试,依赖项(通过程序包管理器)和其他内容的脚本的集合。CMakeJSON的目的是通过提供声明性的项目/组件/目标设置来减轻设置CMake项目的精神负担,该声明式项目/组件/目标设置可以自动正确处理毫不费力地导出和安装目标。 它可以在构建,安装甚至放到您的项目中使用。 建议使用CMakeJSON的方法是安装它,并使用find_package(CMakeJSON) , CMakeJSON_DIR设置为包含已安装的CMakeJSONConfig.cmake文件的目录。 CMakeJSON基于CMakeCS的经验以及CMake中新添加的json解析器。
未来可能的功能
可能永远不会包含的功能
自动下载第三方依赖项。 第三方依赖关系应由程序包管理器处理,而不应由构建系统本身处理
每个CMake项目的剖析
定义顶级项目
# create library
add_library(Box2D file.cpp)
target_compile_features(Box2D PUBLIC cxx_std_11)
target_include_directories(Box2D PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# use library
target_link_libraries(game2 Box2D)
为所有平台设置CI
file READ命令
常用的从文件中读取操作为file(READ <filename> <variable>),将filename文件中内容原封不动读取到variable变量中,命令行全部格式为:
file(read <filename> <variable> [OFFSET <offset>] [L
file(READ <filename> <out-var> [...])
file(STRINGS <filename> <out-var> [...])
file(<HASH> <filename> <out-var>)
file(TIMESTAM
LIMIT : 可选项 最多读取长度的内容到变量中。将test.cpp的文件内容原封不动读取到TEST_RESULT变量中。4、file GENERATE命令。2、file APPEND命令。1、file WRITE命令。3、file TOUCH命令。
其实很多公司和项目就是直接使用make的,但make代码规则严格,语法过于复杂,在做跨平台和跨编译器时的管理更加复杂,移植到不同环境的成本过大。首先cmake是项目构建生成工具,cmake的代码可以与平台系统和编译器无关。makefile 可以理解为是make工具使用的代码,make读取makefile中的配置信息来实现编译、链接和部署。工具” 只是使用这些工具其实就能够编译出所有的目标,但由于命令过于复杂,编译的流程不好控制。也就是说cmake是用来生成makefile和其他项目生成工具配置的。
CMake
是一个跨平台的、开源的构建工具。cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.
目前很多开源的项目都可以通过CMake工具来轻松构建工程.
cmake和makefile的关系,CMake 和makefile_水杯爱喝水的博客-CSDN博客
少量源文件的CMakeLists.txt
一个源文件 main.c
#include <stdio.h>
int mai...