记录嵌入式 linux环境下的编译方式
测试之前确保你的 Ubuntu
机器上安装了Gcc
和cmake
1. 编译有以下几种方式
在 Linux
系统下,编译一个 .c
文件可以有以下几种方式:
- 直接用
Gcc
编译器编译为可执行文件 - 编写
Makefile
文件,使用make
指令,进行编译 - 安装
Cmake
,使用make
指令编译
第一种方式在大型项目中,肯定是不实用的,而 Makefile
的语法个人觉得非常复杂,因此为了“投机取巧”,在这里总结一下 cmake
的方式
1.1 直接gcc指令编译
利用指令,编译为可执行文件
gcc main.c -o hello
1.2 写一个Makefile,然后用 make 指令编译
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)
.PHONY : clean
%.o : %.c
gcc -c $<
clean:
rm *.o
rm main
1.3 写一个Cmakelist,然后用 make指令编译
【工程目录】
├── build
├── CMakeLists.txt
└── main.c
【cmakelist内容】
project(HELLO)
add_executable(hello ./main.c)
【编译】
cd build/
cmake ../
make
以上三种方式比较,明显是使用cmake工具更简单,最起码我个人是这么感觉的
2. Cmake、makefile、Cmakelist
2.1 make
make 指令是linux 自带的默认常用指令,make指令执行后会在目录中找到 makefile 文件,根据makefile文件中的定义来编译整个工程
但是 makefile 语法在不同的平台间是不一样的,譬如 Visual C++的 nmake、 linux 下的 GNU make、 Qt 的 qmake 等等, 这些 make 工具遵循着不同的规范和
标准, 对应的 Makefile 文件其语法、 格式也不相同,
2.2 cmake
camke 允许开发者编写一种与平台无关的 CMakeLists.txt 文件来制定整个工程的编译流程, 再根据具体的编译平台,生成本地化的 Makefile 和工程文件,最后执行 make 编译。
- cmake 工具是跨平台的,比如在linux 平台下写了 makefile ,可以直接编译;但是在qt上就是qmake了,然而不同的平台的makefile语法还不一样
- Cmakelist.txt 在不同的平台间语法是一样的
- cmake 工具通过解析 CMakeLists.txt 自动生成 Makefile
参考:【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4
第三十二章 CMake入门与进阶