Cmake Helloworld

cmake的定义是什么 ?-----⾼级编译配置⼯具
当多个⼈⽤不同的语⾔或者编译器开发⼀个项⽬,最终要输出⼀个可执⾏⽂件或者共享库(dll,so等等)这时候神
器就出现了-----CMake!
所有操作都是通过编译CMakeLists.txt来完成的—简单

CMake⼀个HelloWord

  1. 步骤一 写一个HelloWorld
#main.cpp
#include <iostream>
int main(){
std::cout << "hello word" << std::endl;
}
  1. 步骤二 写CmakeLists.txt
#CMakeLists.txt
PROJECT (HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
  1. 步骤三 使用cmake, 生成makefile 文件
cmake .
输出:
[root@localhost cmake]# cmake .
CMake Warning (dev) in CMakeLists.txt:
 Syntax Warning in cmake code at
 /root/cmake/CMakeLists.txt:7:37
 Argument not separated from preceding token by whitespace.

This warning is for project developers. Use -Wno-dev to suppress it.
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- This is BINARY dir /root/cmake
-- This is SOURCE dir /root/cmake
-- Configuring done
-- Generating done
-- Build files have been written to: /root/cmake

⽬录下就⽣成了这些⽂件-CMakeFiles, CMakeCache.txt, cmake_install.cmake 等⽂件,并且⽣成了Makefile. 现在
不需要理会这些⽂件的作⽤,以后你也可以不去理会。最关键的是,它⾃动⽣成了Makefile.

  1. 使用make 命令编译
root@localhost cmake]# make
Scanning dependencies of target hello
[100%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
Linking CXX executable hello
[100%] Built target hello

5、最终⽣成了Hello的可执⾏程序

CMake⼀个HelloWord-的语法介绍

PROJECT关键字

可以⽤来指定⼯程的名字和⽀持的语⾔,默认⽀持所有语⾔
PROJECT (HELLO) 指定了⼯程的名字,并且⽀持所有语⾔—建议
PROJECT (HELLO CXX) 指定了⼯程的名字,并且⽀持语⾔是C++
PROJECT (HELLO C CXX) 指定了⼯程的名字,并且⽀持语⾔是C和C++
该指定隐式定义了两个CMAKE的变量
_BINARY_DIR,本例中是 HELLO_BINARY_DIR
_SOURCE_DIR,本例中是 HELLO_SOURCE_DIR
MESSAGE关键字就可以直接使⽤者两个变量,当前都指向当前的⼯作⽬录,后⾯会讲外部编译
问题:如果改了⼯程名,这两个变量名也会改变

解决:⼜定义两个预定义变量:PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR,这两个变量和
HELLO_BINARY_DIR,HELLO_SOURCE_DIR是⼀致的。所以改了⼯程名也没有关系.

SET 关键字

⽤来显示的指定变量的
SET(SRC_LIST main.cpp) SRC_LIST变量就包含了main.cpp

也可以 SET(SRC_LIST main.cpp t1.cpp t2.cpp)

MESSAGE关键字

向终端输出⽤户⾃定义的信息
主要包含三种信息:

  • SEND_ERROR,产⽣错误,⽣成过程被跳过。
  • SATUS,输出前缀为—的信息。
  • FATAL_ERROR,⽴即终⽌所有 cmake 过程.

ADD_EXECUTABLE关键字

⽣成可执⾏⽂件
ADD_EXECUTABLE(hello ${SRC_LIST}) ⽣成的可执⾏⽂件名是hello,源⽂件读取变量SRC_LIST中的内容
也可以直接写 ADD_EXECUTABLE(hello main.cpp)
上述例⼦可以简化的写成
PROJECT(HELLO) ADD_EXECUTABLE(hello main.cpp)
注意:⼯程名的 HELLO 和⽣成的可执⾏⽂件 hello 是没有任何关系的

语法的基本原则

  • 变量使⽤${}⽅式取值,但是在 IF 控制语句中是直接使⽤变量名
  • 指令(参数 1 参数 2…) 参数使⽤括弧括起,参数之间使⽤空格或分号分开。 以上⾯的 ADD_EXECUTABLE 指令
    为例,如果存在另外⼀个 func.cpp 源⽂件
    就要写成:ADD_EXECUTABLE(hello main.cpp func.cpp)或者ADD_EXECUTABLE(hello main.cpp;func.cpp)
  • 指令是⼤⼩写⽆关的,参数和变量是⼤⼩写相关的。但,推荐你全部使⽤⼤写指令

语法注意事项

  • SET(SRC_LIST main.cpp) 可以写成 SET(SRC_LIST “main.cpp”),如果源⽂件名中含有空格,就必须要加双引
  • ADD_EXECUTABLE(hello main) 后缀可以不⾏,他会⾃动去找.c和.cpp,最好不要这样写,可能会有这两个文件main.cpp和main
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值