gpt4 book ai didi

c - 将 makefile 迁移到 Windows 时无法识别通配符

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:54 25 4
gpt4 key购买 nike

我正在尝试以某种方式修改 makefile。它可以在 Windows(在我的例子中是 7)上使用 nmake 运行,并从 gcc 更改为 icl。

因为我不太了解在 Windows 上创建 makefile 或编译 C 代码,所以我在让它工作时遇到了一些麻烦......

原始的 makefile 看起来像这样:

# ==================================================================================== #
# = Executable
# ==================================================================================== #

BIN = rename_me

# ==================================================================================== #
# = Compiler settings
# ==================================================================================== #

CC = gcc
CFLAGS += -O3 -std=c99 -Wall
LIBS +=

# ==================================================================================== #
# = Object Files
# ==================================================================================== #

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

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

SRCS=$(wildcard *.c)

OBJS=$(SRCS:.c=.o)

all: $(OBJS)
$(CC) $(OBJS) $(LIBS) -o $(BIN)

clean:
rm -rf *.o
rm -rf $(BIN)

首先,对于 nmake,+= 不存在。

Windows icl 编译器的 -o 也不行。

所以我所做的是

# ==================================================================================== #
# = Executable
# ==================================================================================== #

BIN = rename_me.exe

# ==================================================================================== #
# = Compiler settings
# ==================================================================================== #
CC = icl
# += is an extension not supported by windows
CFLAGS = /O3 /C99 /Wall $(CFLAGS)
LIBS = $(LIBS)

# ==================================================================================== #
# = Object Files
# ==================================================================================== #
# no -o on win
%.o : %.c %.h
$(CC) $(CFLAGS) /c $<

%.s : %.c
$(CC) $(CFLAGS) /S $<

SRCS=$(wildcard *.c)

OBJS=$(SRCS:.c=.o)

all: $(OBJS)
$(CC) $(OBJS) $(LIBS)

clean:
del /S/F *.o
del /S/F $(BIN)

是的,很粗糙,但我想在尝试为 BIN

寻找更优雅的解决方案之前,我应该先看看它是否能运行

嗯,它没有。

makefile(53) : fatal error U1000: Syntax error: missing ")"

第 53 行,即 SRCS=$(wildcard *.c)

不过,我看不出那行有什么问题。

最佳答案

wildcard 是一个 GNU make 扩展。您发布的错误消息看起来像是来自 nmake 的错误消息,它不支持此功能。

改用 GNU Make(例如通过 MinGW)(或者如果可行的话重写 Makefile)。

关于c - 将 makefile 迁移到 Windows 时无法识别通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35795754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com