我需要为我需要在Linux上运行的赋值创建一个makefile。我不知道如何编写makefile。
项目结构如下:
Logic.h
Max.h包括使用标头保护的逻辑,方法如下:
#ifndef _GUI
#include "Logic.h"
#endif
GUI.h,其中包括max.h
和logic.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或所有文件。
答案 0 :(得分:2)
这是一个简单的例子
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 $<
不要复制和粘贴,因为Makfiles需要标签进行缩进。
答案 1 :(得分:2)
一个快速而肮脏的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 automatic variables,但有关特殊make变量的含义,请参见