CMake的hello world(一)使用CMake

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/hjxu2016/article/details/83014069

本系列都是学习<CMake实践>这本书,书下载链接

https://download.csdn.net/download/hjxu2016/10741464

建立一个 t1 文件夹

mkdir t1
cd t1


在 t1 目录建立 main.cpp 和 CMakeLists.txt(注意文件名大小写):
main.cpp 文件内容:
//main.cpp
 

#include<iostream>
using namespace std;
int main()
{
 cout<<"Hello World from t1 Main"<<endl;
 return 0;
}

CmakeLists.txt 文件内容:

PROJECT (HELLO)
# PREJECT指令用法
# PROJECT(projectname [CXX] [C] [JAVA])
# 可以用这个指令定义工程的名称,并指定工程支持的语言,语言列表是可以忽略的,默认情况表示支持所有语言
# 这个指令还隐式定义了两个cmake变量 projectname_BINARY_DIR 和 projectname_SOURCE_DIR,因为采用的是内部编
# 译,两个变量目前指的是工作所在路径,如果是外部编译,两者所指代的内容会有所不同,但是如果改变工程名,
# 那么这两个变量也需要修改,那会很麻烦,所有,建议直接使用PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR
# 外部编译时,PROJECT_BINATY_DIR指的是编译路径, PROJECT_SOURCE_DIR指工程路径
SET(SRC_LIST main.cpp)
#目前暂时先了解SET指令用来显式定义变量
MESSAGE(STATUS "This is Binary dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
# MESSAGE用法
# MESSAGR([SEND_ERROR | STATUS | FATAL_ERROR] "message to display")
# SEND_ERROR : 产生错误,生成过程被跳过
# STATUS: 输出前缀为-的信息
# FATAL_ERROR: 立即终止所有cmake过程
ADD_EXECUTABLE(hello ${SRC_LIST})

# 这个可以生产hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表
# ${}用来引用变量,
# 需要注意,指令大小写无关,参数和变量大小写相关,但是推荐使用大写指令
# ADD_EXECUTABLE 可以忽略source列表中的文件后缀,camke会在本目录自动查找,但是不推荐,万一存在main.


2,开始构建
所有的文件创建完成后,t1 目录中应该存在 main.cpp 和 CMakeLists.txt 两个文件
接下来我们来构建这个工程,在这个目录运行:
cmake . (注意命令后面的点号,代表本目录)。
输出大概是这个样子:
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- This is BINARY dir /backup/cmake/t1
-- This is SOURCE dir /backup/cmake/t1
-- Configuring done
-- Generating done
-- Build files have been written to: /backup/cmake/t1
再让我们看一下目录中的内容:
你会发现,系统自动生成了:
CMakeFiles, CMakeCache.txt, cmake_install.cmake 等文件,并且生成了
Makefile.
现在不需要理会这些文件的作用,以后你也可以不去理会。最关键的是,它自动生成了
Makefile.
然后进行工程的实际构建,在这个目录输入 make 命令,大概会得到如下的彩色输出:
Scanning dependencies of target hello
[100%] Building C object CMakeFiles/hello.dir/main.o
Linking C executable hello
[100%] Built target hello
如果你需要看到 make 构建的详细过程,可以使用 make VERBOSE=1 或者 VERBOSE=1
make 命令来进行构建。
这时候,我们需要的目标文件 hello 已经构建完成,位于当前目录,尝试运行一下:
./hello
得到输出:
Hello World from Main

猜你喜欢

转载自blog.csdn.net/hjxu2016/article/details/83014069