Makefile基本使用

本文介绍了makefile的基本用法,特别是make的自动推导功能,以及CMake作为一种高级编译配置工具,用于解决不同平台编译问题。内容涵盖了CMakeLists.txt的使用、CMake生成Makefile的过程和跨平台优势。
摘要由CSDN通过智能技术生成

目录

1.创建makefile文件

2.makefile中的变量

3.Make 自动推导

4.CMake

1.CMakeLists.txt

2.执行cmake [CMakeLists.txt所在文件夹] 

3.再执行make命令

4.运行可执行文件


1.创建makefile文件

创建三个文件

speak.h

#include<stdlib.h>

void sayHello(const char*);

speak.c

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

void sayHello(const char* str)
{
    static int count = 0;
    count++;
    printf("Hello %s.\n",str? str :"world");
    printf("count: %d\n",count);
}

hellospeak.c

#include"speak.h"

int main(int argc, char *argv[])
{
    sayHello("world");
    sayHello("Airwave");
    return 0;
}

编写makefile文件

hello_demo : hellospeak.o speak.o
	gcc -o hello_demo hellospeak.o speak.o

hellospeak.o : hellospeak.c speak.h
	gcc -c hellospeak.c
speak.o : speak.c speak.h
	gcc -c speak.c

clean :
	rm hello_demo speak.o hellospeak.o

使用make执行,会在当前文件中匹配makefile或者Makefile文件

2.makefile中的变量

类似c中的定义宏

变量定义:   变量名 = 值     使用shell script 的语法

objects = hellospeak.o speak.o

hello_demo : $(objects)
	gcc -o hello_demo $(objects)

hellospeak.o : hellospeak.c speak.h
	gcc -c hellospeak.c
speak.o : speak.c speak.h
	gcc -c speak.c

clean :
	rm hello_demo $(objects)

3.Make 自动推导

make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中。比如,make找到一个hello.o,那么hello.c,就会是hello.o的依赖文件。并且 gcc -c hello.c 也会被推导出来

objects = hellospeak.o speak.o

hello_demo : $(objects)
	gcc -o hello_demo $(objects)

$(objects) : speak.h

# hellospeak.o : hellospeak.c speak.h
# 	gcc -c hellospeak.c
# speak.o : speak.c speak.h
# 	gcc -c speak.c

clean :
	rm hello_demo $(objects)

4.CMake

        现在有很多Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。总之,不同的make工具最终都是生成一个makefile文件

         CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTKITKKDEOpenCVOSG 等 。

 安装cmake

sudo apt-get install cmake

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 生成 Makefile。其中, PATH 是 CMakeLists.txt 所在的目录。
  3. 使用 make 命令进行编译。
# 指定 CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)

# 为项目命名
project(MyProject)

# 添加可执行文件并指定源文件
add_executable(my_executable main.cpp)

# 可选:设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
  1. cmake_minimum_required(VERSION 3.10): 指定 CMake 的最低版本要求。

  2. project(MyProject): 为项目命名,可以将 "MyProject" 替换为的项目名称。

  3. add_executable(my_executable main.cpp): 添加可执行文件,并指定源文件。假设源文件是 main.cpp,可以根据实际情况添加更多的源文件。

  4. set(CMAKE_CXX_STANDARD 11): 设置 C++ 标准为 C++11。可以根据需要选择其他标准,比如 C++14 或 C++17。

  5. set(CMAKE_CXX_STANDARD_REQUIRED True): 告诉 CMake 要求指定的 C++ 标准,如果不支持就报错。

进行测试

1.CMakeLists.txt

#CMake 最低版本要求
cmake_minimum_required(VERSION 3.22)

#项目信息
project(HelloSpeak)

#指定生成的目标
add_executable(CmakeHelloSpeak speak.c hellospeak.c)

2.执行cmake [CMakeLists.txt所在文件夹] 

生成了一套标准的Makefile文件,

多了cmake_install.cmake, CMakeCache.txt, Makefile

3.再执行make命令

经过链接后生成可执行文件 CmakeHelloSpeak 

4.运行可执行文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值