【问题标题】:addprefix command not recognized in makefile using nmake.exe windows使用 nmake.exe windows 在 makefile 中无法识别 addprefix 命令
【发布时间】:2013-02-23 20:10:57
【问题描述】:
all: prd.exe

CC=cl
CFLAGS=-O2 -I../src -I. /W4
LDFLAGS = /Zi
LIBSRC = $(addprefix ../lib/, \
        open.c malloc.c \
     ) \
     $(addprefix ../src/, \
        main.c \
      ) \
      helper.c

LIBOBJS = $(LIBSRC:.c=.o)

prd.exe: ../src/main.obj
$(CC) $(LDFLAGS) -Fe$@ *.o

../src/main.obj: ../src/main.c
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.o:
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.i:
$(CC) $(CFLAGS) $(LIBOBJS) -C -E $< > $@

clean:
del /s /f /q ..\lib\*.o ..\src\*.o *.o *.exe *.pdb

distclean: clean

我收到这个错误

致命错误 U1000:第 6 行的宏调用中缺少语法错误:')'

我在这里错过了什么吗? nmake 确实可以识别 addprefix,对吧?

【问题讨论】:

    标签: windows makefile gnu-make nmake


    【解决方案1】:

    不,addprefix 是 GNU make 扩展。你有一个需要 GNU make (gmake) 来处理的 GNUmakefile。

    或者,您可以重写 GNU makefile 以不使用 GNU 扩展。在您的情况下,这应该很容易:

    LIBSRC = $(addprefix ../lib/, \
            open.c malloc.c \
         ) \
         $(addprefix ../src/, \
            main.c \
          ) \
          helper.c
    

    变成

    LIBSRC = ../lib/open.c ../lib/malloc.c ../src/main.c helper.c
    

    【讨论】:

    • 哦..我的坏..那么在nmake中addprefix的等价物是什么
    • 以前,我也在做同样的事情。但是现在我的代码库正在增加,我想避免在每个文件中预先添加../lib
    • 我不是 nmake 爱好者,但恐怕没有同类。请参阅msdn.microsoft.com/en-us/library/dd9y37ha.aspx 上的 nmake 参考
    • FWIW 我经常使用 cygwin 的 make 和 VisualStudio 编译器。运行良好,您可以拥有适当的可移植 makefile(MacOS、Linux、Windows),而且您不必处理令人难以置信的可怕 nmake。
    • @bobbogo 这可能是迄今为止我找到的最好的“通用”nmake 答案!...我想如果我必须为我需要使用 nmake 的 Visual Studio 目标构建东西,所以我开始了学习了(egghhh ...)-但正如您所说...为什么不直接使用make! - 注意你可以安装类似mingw的东西并使用它的make(如果你不想安装Cygwin)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2016-06-05
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多