【问题标题】:Multiple compilations with makefile使用 makefile 进行多次编译
【发布时间】:2016-11-08 13:28:07
【问题描述】:

我在使用 Makefile 时遇到了严重的问题,我正在尝试在其中运行这些命令,到目前为止,我所做的大部分更改都导致“没有什么可以为 'all' 做任何事情”,无论我更改行,它只是不起作用。例如,PROG4 应该在下面工作,但它说什么都不做。

BIN_DIR = bin
LEX_DIR = lexyacc-code
LIB_DIR = lib
SRC_DIR = src
OBJ_DIR = obj

CC = gcc
BS = bison
FX = flex
CFLAGS = -I$(LIB_DIR)

SRCS = $(wildcard $(LEX_DIR)/calc3b.c)
SRCS2 = $(wildcard $(LEX_DIR)/calc3.y)
SRCS3 = $(wildcard $(LEX_DIR)/calc3.l)
SRCS4 = $(wildcard $(OBJ_DIR)/y.tab.c)
SRCS5 = $(wildcard $(OBJ_DIR)/lex.yy.c)

OBJS = $(patsubst $(LEX_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))


PROG = calc3b
PROG2 = y.tab
RM = rm -f

MVV="$(shell mv y.tab.c obj)"; echo $MVV


all: $(PROG2) $(PROG4) 


$(PROG): $(OBJS)
    $(CC) $^ -o $(PROG)

$(PROG2):
    $(BS) -y -d $(SRCS2)  

$(PROG4): $(CC) -c $(SRCS4) $(SRCS5) $(CFLAGS)


$(OBJ_DIR)/%.o: $(LEX_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@


clean:
    $(RM) $(PROG) $(OBJS)

只有 PROG2 工作,基本上为了结果,我有头文件和源文件,我试图移动特定的文件夹,但最终我用 'mv' 命令完成了它(我知道它反对 Makefile)。

命令如下:

bison -y -d calc3.y
flex calc3.l
gcc -c y.tab.c lex.yy.c
gcc y.tab.o lex.yy.o calc3b.c -o calc3b.exe

第一个命令,结果我有一个标头和源代码。

第二个结果是我有一个来源。

第三,我有 2 个对象文件。

第四,我将有一个可执行文件。

因此,我还需要将这些文件移动到它们的特定文件夹中。

谁能帮我解决这个问题?谢谢。

【问题讨论】:

    标签: c makefile multiple-makefiles


    【解决方案1】:

    我认为 $(PROG4) 的问题在于您忘记将命令放在带有制表符的新行上。在上面显示的内容中,整行命令都放置在它应该是依赖项而不是命令的位置。因此,makefile 不会为 $(PROG4) 执行任何命令。

    【讨论】:

    • 另外还需要为PROG2PROG4声明一些先决条件;例如,$(PROG2) 应将 $(SRCS2) 列为先决条件,$(PROG4) 应将$(SRCS4) $(SRCS5) 列为先决条件。确实,这里有很多可以改进的地方。
    • 声明他们解决了这个问题,谢谢。但是在指定的文件夹中创建构建工件仍然没有实现,因为我只知道如何在对象中做到这一点。暂时我使用'mv'命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多