命令行编译代码

        在Linux中编译代码通常涉及使用编译器将源代码文件(如C、C++、C#、Go等)转换成可执行文件或库。下面以C为例子,首先需要安装对应编译器,对于C和C++,就是以GCC(GNU Compiler Collection)为解释器

sudo apt update  
sudo apt install build-essential

 在使用编译器编译源代码时,可以使用下面代码进行编译

gcc hello.c -o hello

这里,hello.c是源代码文件,-o hello指定输出文件名为hello。执行这个命令后,会生成一个名为hello的可执行文件。最后在终端运行编译后的程序。

./hello

处理依赖

如果你的项目依赖于其它库,则需要在编译时指定这些库的路径,或事先安装这些库的开发文件。对于这种情况,编译命令可能会更复杂,并且可能包含-I(指定头文件路径)、-L(指定库文件路径)和-l(链接特定库)等选项。

Makefile编译

        Makefile是一个在Linux系统中用于自动化编译和构建项目的文件,即面对更复杂的项目,Makefile定义了如何编译和链接项目的各个部分,以及哪些文件依赖于哪些其他文件。通过运行make命令,你可以一次性编译整个项目,无需手动编译每个文件。

Makefile解释

  • 目标(Target):通常是编译后生成的文件,如可执行文件、对象文件或库文件。
  • 依赖(Dependencies):生成目标所需的文件或条件,如源代码文件、头文件或特定的环境配置。
  • 命令(Command):用于生成目标的指令或操作,如编译命令或链接命令。

Makefile具体用法

1、创建makefile:

         在项目根目录下创建一个名为Makefile或makefile的文件

2、编写规则:

        在Makefile中,你需要定义规则来告诉make如何构建目标。基本格式如下

target: dependencies  
    commands

例如,一个简单的C程序的Makefile可能如下所示:

hello: hello.o  
    gcc hello.o -o hello  

hello.o: hello.c  
    gcc -c hello.c -o hello.o

 这里hello是目标,hello.o是依赖,而gcc hello.o -o hello是用于生成目标的命令,同样,第三行hello.o也是一个目标,依赖于hello.c,使用gcc -c hello.c -o hello.o生成

3、执行Make:

        在终端中,导航到包括Makefile的目录,并运行make命令。make会读取Makefile中的规则,并根据依赖关系确定哪些目标需要更新。

make

如果只想构建特定目标,可以在make命令后指定目标名

make hello

4、清理:

        通常,Makefile 还会包含用于清理构建过程中生成的文件的规则。这通常是一个名为 clean 的伪目标(phony target)。

.PHONY: clean  

clean:  
    rm -f hello hello.o

你可以通过运行 make clean 来执行清理操作,删除生成的目标文件和对象文件。

5、变量和函数:

        Makefile还支持变量和函数,这使得编写更复杂的构建规则变得更容易。例如,你可以定义一个变量来存储编译器选项,并在多个规则中使用它。

CC = gcc  
CFLAGS = -Wall -g  

hello: hello.o  
    $(CC) $(CFLAGS) hello.o -o hello  

hello.o: hello.c  
    $(CC) $(CFLAGS) -c hello.c -o hello.o

在这个例子中,CC 是编译器变量,CFLAGS 是编译器选项变量。在规则中使用 $(CC) 和 $(CFLAGS) 来引用这些变量。

CMake工程

        CMake是一个跨平台的编译工具,主要是通过编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库。

使用方法


  * 编写CMakeLists.txt文件:在每个需要编译的文件夹下都需要一个CMakeLists.txt文件,用于配置该文件夹的链接和编译规则。
  * 使用cmake命令:在CMakeLists.txt文件所在的目录下执行cmake命令,例如`cmake ..`表示CMakeLists.txt在当前目录的上一级目录。
  * 使用make命令:执行make命令来编译项目,生成可执行文件或共享库。

此外,CMake还提供了许多函数和变量,如add_library()、target_include_directories()和AUX_SOURCE_DIRECTORY()等,用于更灵活地管理项目的构建过程。

总的来说,CMake通过编写CMakeLists.txt文件和使用cmake、make命令来实现项目的编译和构建。这使得CMake成为一个强大而灵活的跨平台编译工具,能够方便地管理复杂的项目构建过程。

交叉编译

安装交叉编译工具链

在使用GCC编译ARM程序时,则需要安装交叉编译器工具链,例如,在Ubuntu上,你可以使用apt来安装arm-none-eabi-gcc

sudo apt update  
sudo apt install gcc-arm-none-eabi

安装此GCC版本,专为ARM架构编译代码

配置环境变量

一旦安装了交叉编译工具链,你可能需要配置环境变量以便在命令行中轻松使用它们。你可以通过在~/.bashrc~/.bash_profile~/.profile文件中添加以下行来做到这一点:

export PATH=$PATH:/path/to/your/cross/compiler/bin  
export CROSS_COMPILE=arm-none-eabi-

/path/to/your/cross/compiler/bin替换为你的交叉编译工具链的实际安装路径。然后,运行source ~/.bashrc(或相应的文件)以使更改生效。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐