linux下编译工程(使用命令行、Makefile、cmake编译helloworld)

linux环境下编译工程是开发的基础。使用helloworld总结一下基础的编译方法。

1.命令行法(在控制台中指定编译器直接编译)

步骤如下:
(1)新建hello.c并添加内容
(2)选择编译器gcc使用命令gcc hello.c -o helloworld生成可执行文件helloworld
命令行主要是指定编译器gcc,源文件名hello.c,生成的可执行文件名helloworld

2.使用makefile

由于一个大型的工程项目中通常包括很多的源文件和库,如果使用命令行每次编译时一行行去输命令,这样编译链接会很麻烦。那么就写成文件的形式,达到一次记录,多次使用的目的,简化编译流程。
linux下使用makefile编译源文件的工具一般是GNU make。如果当前目录下有Makefile文件,那么直接输入make就能实现编译链接生成可执行文件。以编译helloworld为例,
步骤如下:
(1)新建hello.c并添加内容

#include <stdio.h>
int main() 
{
    printf("Hello world!\n");
    return 0;
}

(2)新建MakeFile文件,并编辑内容MakeFile如下

#helloworld is a binary file
helloworld: hello.o
        gcc -o helloworld hello.o
hello.o: hello.c
        gcc -c -o hello.o hello.c

(3)在命令行输入make,可以看到当前文件夹下生成helloworld可执行文件。
上面的MakeFile文件似乎看起来还算简单,可是语法上对于初学者来说就有点复杂了,make是一个递归创建的过程,如以上的helloworld: hello.o,使用冒号分开为目标文件:前提文件。整个流程是hello.c编译成hello.o,hello.o链接成helloworld可执行文件 helloworld。
makefile编译的缺点:
(1)每次都需要指定中间的文件,而我们只需要得到最后的可执行文件就行了,因此写makefile很麻烦。
(2)makefile里面的语法较复杂,特别是一些符号,如类似于 ( C C ) 、 ∗ ∗ ‘ (CC)、**` (CC)*`**、.SUFFIXES: .c .o 这样的宏,对于初学者很难理解。
因此,有没有更简单的方法生成Makefile文件呢?
使用工具cmake生成Makefile比自己直接写更加方便。

3使用cmake生成Makefile

若要使用cmake,需要先安装cmake。若安装成功在控制台输入cmake --version,控制台返回版本号如cmake version 2.8.7
使用cmake生成Makefile
步骤如下:
(1)新建cmakehello工程文件夹
(2)在cmakehello文件夹下新建hello.c文件
(3)在文件夹下新建CMakeLists.txt,并添加如下内容

cmake_minimum_required (VERSION 2.6)
project (cmakehello)
add_executable(cmakehello hello.c)

(4)命令行编译
在hello.c文件夹下新建文件夹build,切到build文件夹下,输入命令如下

makedir build
cd build
cmake ..
make

在build文件夹下生成了cmakehello可执行文件

(5)也可以在控制台输入cmake-gui运行cmake图形化工具编译
a)选择源文件目录本例即hello.c所在的目录,如图where is source code选项。
b)选择生成的中间文件(包括Makefile文件)和可执行文件的目录
如图where to build the binaries
这里写图片描述
c)在CMAKE_INSTALL_PREFIX选择可执行文件安装的路径
d)选择编译类型CMAKE_BUILD_TYPE 一般为Debug,release
e )点击configure配置,弹出编译器类型选择界面,选择编译器类型
f )点击generate就能在where to build the binaries目录下看到Makefile文件了
(5)切换到此目录下输入make即完成了编译链接,可以看到文件夹下生成了cmakehello可执行文件

好的,这里给出一个简单的示例,演示如何使用 CMake 进行 Linux 驱动程序的编译。 假设你的驱动程序源代码文件为 `hello.c`,代码如下: ```c #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple Hello World module"); static int __init hello_init(void) { printk(KERN_INFO "Hello World!\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "Goodbye World!\n"); } module_init(hello_init); module_exit(hello_exit); ``` 现在,我们按照以下步骤使用 CMake 进行编译: 1. 在驱动程序源代码文件所在的目录下创建一个 `CMakeLists.txt` 文件文件内容如下: ``` cmake_minimum_required(VERSION 2.8) project(hello) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") add_executable(hello hello.c) ``` 2. 进入驱动程序源代码所在的目录,创建一个 `build` 目录,并进入该目录: ``` cd /path/to/source mkdir build cd build ``` 3. 执行 `cmake` 命令,生成 Makefile: ``` cmake .. ``` 4. 执行 `make` 命令,编译驱动程序: ``` make ``` 5. 若编译成功,你将在 `build` 目录下看到 `hello` 可执行文件,这就是你的驱动程序。 这个示例虽然很简单,但是演示了如何使用 CMake 进行 Linux 驱动程序的编译。如果你的驱动程序涉及到更复杂的功能,你需要在 `CMakeLists.txt` 文件中添加更多的源文件、头文件路径等信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值