SRM Vision 秋季培训

by Leozheng @ SRMVision

§2 C编译原理&&CMake入门

CMake?Make?Makefile?(Tips, to learn these, better have a general understanding of preprocessing - compiling - assembly - linking, and that's how a C program from 0 to 1.)

Also, the "Four-Steps-Bagu" of installing a cmake-based package:

mkdir build && cd build

cmake ..

make -j8

make install

Make sure to understand all the processes and meanings of these commands.

所以今天,咱来讲:

  1. Linux基本命令行
  2. C编译机制
  3. Make工具与MakeFile
  4. CMake入门

本讲概述

今天的四个Part,三个工具,一个理论

So...还是那句老话,工具我是不学的,会用就行。

 

入门要求:做到基本了解,会用就行。

进阶要求(我觉得入队至少):

  • 熟练运用Linux命令行,
  • 熟悉C编译机制,宏编程。
  • Make工具与MakeFile,了解原理。
  • CMake,会看会写。

 

讲到最后,还是怎么学CS......

 

本讲要求

Part1 Linux基本命令(复习)

Linux基本命令行

  • man / tldr
  • cd / ls
  • sudo
  • 文件路径的表示
  • chmod / cp / mkdir
  • tar -xzvf
  • rm
  • reboot / shutdown now
  • grep

 

  • apt install/remove
  • dpkg -i(.deb)
  • snap install/remove

 

  • 管道


还有一些其他常用的工具

  • git
  • cmake / make
  • g++ / gdb
  • vim
  • history
  • lsusb / lspci
  • ./cfw
  • wget
  • openvpn3


Part2 C编译机制

在 IDE 里,为什么按一个键,就能编译运行?

  • 编译、链接
    • .c → 预编译 → .i → 编译 → .s → 汇编 → .o → 链接 → a.out
  • 加载执行
    • ./a.out

背后是通过调用命令行工具完成的

  • RTFM: gcc --help; man gcc
    • 控制行为的三个选项:-E, -S, -c

当然我只讲最基本的东西。

上手就行、、、

标准规定 C 程序从 main 开始执行

int main(int argc, char *argv[]);

  • argc (argument count): 参数个数
  • argv (argument vector): 参数列表 (NULL结束)
  • ls -al (argc = 2, argv = ["ls", "-al", NULL])

以下代码有什么区别?

#include <stdio.h>
#include "stdio.h"

为什么在没有安装库时会发生错误?

#include <SDL2/SDL2.h>

你可能在书/阅读材料上了解过一些相关的知识

宏展开:通过复制/粘贴改变代码的形态

  • #include → 粘贴文件

Part3 Make工具与Makefile

  • Makefile 是一段 “declarative” 的代码
    • 描述了构建目标之间的依赖关系和更新方法
    • 同时也是和 Shell 结合紧密的编程语言
      • 能够生成各种字符串
      • 支持 “元编程” (#include, #define, ...)

Part4 CMake入门

  • include_directories
    • ​​将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。
  • add_executable
    • 创建可执行文件
  • target_link_libraries
    • 为可执行文件链接库的头文件

感 谢

@ SRMVision