c/c++语言开发共享在Raspbian中创建一个Makefile

我正在尝试在Raspbian(Raspberry Pi)中为我的C程序创建一个Makefile。 我的程序包含一堆.c和.h文件。 我看过无数的Makefiles,但我不会解释它如何与多个文件一起工作。 Makefile中总有.o文件,但据我所知,目标文件是编译的结果,所以我没有任何o。 文件,因为我正在尝试编译我的.c文件。

请向我解释这是如何工作的。

编辑:

谢谢。 所以我尝试了这个,它开始编译,但有错误’多重定义’。 例:

这些是我的文件:

main.c main.h calibration.c calibration.h file.c file.h frame.c frame.h gamepad.c gamepad.h gpio.c gpio.h uart.c uart.h types.h 

这是我的makefile:

 all: main main: main.o calibration.o file.o frame.o gamepad.o gpio.o uart.o %.o: %.c gcc -c -std=c99 -Wall $< -o $@ -lncurses 

我在哪里可以放’types.h’? 对于每个文件,我都会收到错误“多个定义”

    一个非常简单但典型的makefile可能看起来像这样

     SOURCES = source1.c source2.c source3.c OBJECTS = $(SOURCES:%.c=%.o) TARGET = myExecutable $(TARGET): $(OBJECTS) gcc $^ -o $@ %.o: %.c gcc -c $< -o $@ 

    复杂的部分:

    另请注意,如果make没有特定目标的情况下调用make ,则将选择第一个规则。 对于上面的makefile,它将是$(TARGET): $(OBJECTS)规则,它将确保所有目标文件都是从源文件构建的,然后将目标文件链接到生成的可执行文件中。

    make规则的基本语法是:

     target … : prerequisites … recipe … … 

    分号的左边是目标。 目标是您的目标文件( .o )。 分号右侧是创建此文件所需的文件。 这些文件是源文件( .c )。

    让我们举一个这样的规则可能是什么样子的基本例子。

     %.o: %.c gcc -c $< -o $@ 

    %符号是通配符。 %.o表示以.o结尾的所有内容。 因此,如果你想创建一个目标文件,你可以说make file.omake会尝试找到一个可以用来制作这个目标的规则。 这恰好是我刚才展示的规则,因为file.o匹配%.o

    然后是recipe 。 这是将要执行的。 通常是关于调用编译器( gcc ),并将其提供给源文件以生成目标文件。 这就是我们用gcc -c $< -o $@做的事情。 $<$@分别表示targetprerequisites

    那么,当你'想要'构建你的程序时会发生什么? 您通常会输入make ,它将构建。 键入make时使用的默认规则是all 。 因此,如果您制定了关于all规则的规则,那么您可以指定要创建的文件来构建程序。 这样一条规则的例子:

     all: main 

    然后,当调用make时,它会找到该规则并发现它需要main 。 要创建main您需要另一条规则:

     main: file.o 

    这个规则说要构建main ,你需要file.o 因此,当您将所有示例规则放在一起时,您会得到:

     all: main main: file.o %.o: %.c gcc -c $< -o $@ 

    请注意,您可以指定多个文件,因此可以使用file.o main.o other_file.o等来代替file.o main.o other_file.o如果他们可以找到一个规则来创建它,那么将指定您指定的每个先决条件。

      以上就是c/c++开发分享在Raspbian中创建一个Makefile相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519752.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐