繁体   English   中英

如何创建一个makefile文件?

[英]How to create a makefile?

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

该项目的结构如下:

逻辑

Max.h,其中包括通过以下方式使用头保护的Logic:

#ifndef _GUI
#include "Logic.h"
#endif

GUI.h通过以下方式包括max.hlogic.h

#ifndef _GUI
#define _GUI
#include "Logic.h"
#include "Minimax.h"
#endif

prog.h包括GUI.h (PROG是主要的文件-的主要功能是有)

所有头文件都有对应的.c文件,这些文件仅包含其各自的头。

GUI.h使用SDL 1.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_test.o # add more files just separated by spaces -> filename.o
LDFLAGS = -lm `sdl-config --libs`
CFLAGS  = -Wall -Werror -pedantic -g3 -O0 # full debugging on
CC      = gcc
TARGET  = sdl_test

all: 
    $(CC) -o $(TARGET) $(OBJECTS) $(LDFLAGS)

clean:
    @rm $(OBJECTS) $(TARGET)

%.o: %.c
    $(CC) $(CFLAGS) -c $<

不要复制和粘贴,因为Makfile文件需要使用制表符进行缩进。

快速而肮脏的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`

有关详细信息,请参见生成自动变量

  • $ @-冒号之前的东西
  • $ <-冒号之后的第一件事
  • $ ^-冒号之后的所有内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM