Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何创建makefile?_C_Linux_Makefile - Fatal编程技术网

C 如何创建makefile?

C 如何创建makefile?,c,linux,makefile,C,Linux,Makefile,我需要为需要在Linux上运行的任务创建一个makefile。我不知道如何编写makefile 项目结构如下: 逻辑 Max.h,包括以以下方式使用标题保护的逻辑: #ifndef _GUI #include "Logic.h" #endif #ifndef _GUI #define _GUI #include "Logic.h" #include "Minimax.h" #endif GUI.h,其中包括max.h和logic.h,如下所示: #ifndef _GUI #include "

我需要为需要在Linux上运行的任务创建一个makefile。我不知道如何编写makefile

项目结构如下:

逻辑

Max.h,包括以以下方式使用标题保护的逻辑:

#ifndef _GUI
#include "Logic.h"
#endif
#ifndef _GUI
#define _GUI
#include "Logic.h"
#include "Minimax.h"
#endif
GUI.h,其中包括max.h和logic.h,如下所示:

#ifndef _GUI
#include "Logic.h"
#endif
#ifndef _GUI
#define _GUI
#include "Logic.h"
#include "Minimax.h"
#endif
prog.h包括GUI.h prog是主文件-主功能就在那里

所有头文件都有相应的.c文件,这些文件只包括各自的头文件

h使用SDL1.2,因此它还包括以下内容

#include "SDL.h"
#include "SDL_video.h"
我知道必须在makefile中插入特殊标志,以便SDL能够正常运行

这是一个仅包含一个SDL文件的makefile示例,因此它具有SDL的标志以及通知错误和警告所需的标志:

all: sdl_test

clean:
    -rm sdl_test.o sdl_test

sdl_test: sdl_test.o
    gcc  -o sdl_test sdl_test.o -lm -std=c99 -pedantic-errors -g `sdl-config --libs`

sdl_test.o: sdl_test.c
    gcc  -std=c99 -pedantic-errors -c -Wall -g -lm sdl_test.c `sdl-config --cflags`
但我不知道如何为此文件项目结构创建makefile,也不知道将SDL标志放在何处-仅适用于具有SDL的文件,或仅适用于具有SDL且包含具有SDL的文件或所有文件的文件。

这是一个简单的示例

OBJECTS=sdl\u test.o添加更多仅由空格分隔的文件->filename.o LDFLAGS=-lm`sdl config-libs` CFLAGS=-Wall-Werror-pedantic-g3-O0完全调试打开 CC=gcc 目标=sdl_测试 全部: $CC-o$TARGET$OBJECTS$LDFLAGS 清洁: @rm$OBJECTS$TARGET %.o:%.c $CC$CFLAGS-c$<
不要复制和粘贴,因为Makefiles需要缩进选项卡。

一个快速而脏的Makefile,也就是说,一个您不想为成品分发的Makefile可能只是

SRCS  = Max.c GUI.c prog.c
OBJS := $(patsubst %.c, %.o, $(SRCS))

.PHONY: all clean
.DEFAULT_GOAL = all

all: sdl_test

clean:
    -rm $(OBJS) sdl_test

sdl_test: $(OBJS)
    gcc -o $@ $^ -lm -std=c99 -pedantic-errors -g `sdl-config --libs`

%.o: %.c
    gcc -std=c99 -pedantic-errors -c -Wall -g -lm $< `sdl-config --cflags`
有关详细信息,请参见,但请简要介绍特殊的make变量含义

$@-冒号前面的东西 $<-冒号后面的第一件事 $^-冒号后面的所有内容
那些不教如何做作业的学校在哪里?标准中保留了以u和大写字母开头的名称。不要使用它们!所以,我想澄清一下,SDL标志必须出现在哪里?是只出现在有SDL的文件上,还是只出现在有SDL的文件上,包括有SDL的文件或所有文件?Thanks@scifieSDL的编译标志可以应用于任何文件。需要它们的人会使用它们,不需要它们的人会忽略它们。链接器标志必须应用于链接/构建最终可执行文件的配方,这里是sdl_测试:$OBJS one。您的文件不包括重要的Logic.c文件。我真的想要一些帮助,包括它以及。