gmake(Gnu)制作(Cygwin) - 验证我的实施[仅3个陈述]

时间:2017-10-22 16:56:14

标签: c makefile cygwin gnu-make gnu

我需要将为gmake构建的makefile转换为可以通过cygwin“make”命令执行的makefile。

GMAKE代码如下:

OBJ := ${SOURCES:%.c=%.o}

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

$(LIBNAME).lib: $(OBJ)
    $(AR) rcs $@ $(OBJ)

clean:
    del $(OBJ)
    del *.out 

我在Cygwin makefile中使用了以下语句。如果它复制了上面的gmake语句或者我遗漏了什么,请你确认一下。任何输入都会有所帮助。

Cygwin“make”:

OBJ := ${SOURCES:%.c=%.o}

%.obj: %.c
    $(CC) -c -o `cygpath -w $@` `cygpath -w $<` $(CFLAGS) $(DEFINES)

.DEFAULT_GOAL := ${LIBNAME}.lib
${LIBNAME}.lib: $(OBJS) 
    $(SILENCE)echo -e "Archive: ${LIBNAME}.lib\n"
    $(SILENCE)$(AR) $(ARFLAGS) `cygpath -w $@` ${OBJS}} 

clean:
    rm $(OBJ)
    rm *.out

非常感谢。

1 个答案:

答案 0 :(得分:0)

正如@matzeri所指出的,cygwin make gnu make。 这就是我使用它的原因。 第一个makefile对我来说很好。

如果您的所有文件都使用相对路径,那么一切都应该没问题。 甚至Microsoft编译器也可以构建subdir/file.cpp并将对象粘贴到objdir/file.ocl subdir/file.cpp -o objdir/file.o)。

提示:努力在文件名中使用正斜杠。总是

你可能遇到的唯一困难是绝对路径, 通常出现在包含路径中。 /usr/local/include只对cygwin程序有意义。 cl.exe希望将此转换为C:/cygwin64/usr/local/include

不要使用反斜杠,除非命令确实确实需要它。 那么一个问题是 bash 解释反斜杠, 因此,您必须以某种方式引用文件名以防止这种情况发生。

objdir/1.o: /usr/local/src/1.cpp
    some-odd-compiler "$$(cygpath -wa $<)" -o "$$(cygpath -w $@)"

如果使用正斜杠(cygpath -ma),则不需要引用。

为什么更喜欢$(…)而不是`…`?因为那时双引号嵌套。 如果相关路径扩展为包含空格的内容("$$(cygpath -wa "$<")"

,则非常有用