Cmake Helloworld

导读:本篇文章讲解 Cmake Helloworld,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76868.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!