CMake入门---最简单的helloworld程序
来源:互联网 发布:淘宝评价语100字 编辑:程序博客网 时间:2024/05/29 03:54
先写一个简单的helloworld C语言程序
#include <stdio.h>int main(){ printf("Hello world\n");}
写一个CMakeLists.txt
PROJECT(hello)SET(SRC_LIST main.c)MESSAGE(STATUS "This is BINARY dir "${HELLO_BINARY_DIR})MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})ADD_EXECUTABLE(hello ${SRC_LIST})
cmake 运行可构建出Makefile 文件
PROJECT 指令的语法是:
PROJECT(projectname [CXX] [C] [Java])
你可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,
默认情况表示支持所有语言。这个指令隐式的定义了两个 cmake 变量:
_BINARY_DIR 以及_SOURCE_DIR,这里就是
HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR(所以 CMakeLists.txt 中两个 MESSAGE
指令可以直接使用了这两个变量),因为采用的是内部编译,两个变量目前指的都是工程所
在路径/backup/cmake/t1,后面我们会讲到外部编译,两者所指代的内容会有所不同。
同时 cmake 系统也帮助我们预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR
变量,他们的值分别跟 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR 一致。
为了统一起见,建议以后直接使用 PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR,即
使修改了工程名称,也不会影响这两个变量。如果使用了
_SOURCE_DIR,修改工程名称后,需要同时修改这些变量。
SET 指令的语法是:
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
现阶段,你只需要了解 SET 指令可以用来显式的定义变量即可。
比如我们用到的是 SET(SRC_LIST main.c),如果有多个源文件,也可以定义成:
SET(SRC_LIST main.c t1.c t2.c)。
MESSAGE 指令的语法是:
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display” …)
这个指令用于向终端输出用户定义的信息,包含了三种类型:
SEND_ERROR,产生错误,生成过程被跳过。
SATUS,输出前缀为—的信息。
FATAL_ERROR,立即终止所有 cmake 过程.
我们在这里使用的是 STATUS 信息输出,演示了由 PROJECT 指令定义的两个隐式变量
HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR。
ADD_EXECUTABLE(hello ${SRC_LIST})
定义了这个工程会生成一个文件名为 hello 的可执行文件,相关的源文件是 SRC_LIST 中
定义的源文件列表, 本例中你也可以直接写成 ADD_EXECUTABLE(hello main.c)。
在本例我们使用了
${}
来引用变量,这是 cmake 的变量应用方式,但是,有一些例外,比如在 IF 控制语句,变量是直接使用变量名引用,而不需要
将本例改写成一个最简化的 CMakeLists.txt:
PROJECT(HELLO)
ADD_EXECUTABLE(hello main.c)
- CMake入门---最简单的helloworld程序
- eclipse的最简单程序HelloWorld
- HelloWorld 最简单的Java程序
- Java最简单的一个程序 HelloWorld
- cmake的简单入门
- 最简单的类似HelloWorld的tuxedo程序
- 最简单的基于FFMPEG的Helloworld程序
- 最简单的基于FFMPEG的Helloworld程序
- 最简单的基于FFMPEG的Helloworld程序
- MFC-最简单的MFC程序
- Prog1: helloworld.c 最简单的MPI程序
- 简单的HelloWorld程序
- ruby on rails入门系列--一个简单的HelloWorld程序
- Java简单入门之----- HelloWorld
- 最简单的Spring HelloWorld
- SOCKET入门最简单的程序啊
- SOCKET入门最简单的程序啊
- qt入门,最简单的qt程序
- 钜泉芯片HT6x2x在MDK编译器中的启动文件内容解析
- java带包类的编译与运行
- 08:病人排队
- 多个条目
- Vue.js组件——组件的基础知识
- CMake入门---最简单的helloworld程序
- XSS攻击测试代码
- gst-rtsp-server 转发服务器的搭建
- haproxy检测页面参数解释
- Leetcode(W9):123. Best Time to Buy and Sell Stock III(动态规划)
- 用jquery插件写一个小米官网左侧二级菜单
- 上拉刷新下拉加载
- SpringAOP导致@Autowired依赖注入失败
- C++ vector用法总结