c-gmake(Gnu)对我的实现进行(Cygwin)-验证[仅3条语句]



我需要将为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"制造":

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}.libn"
$(SILENCE)$(AR) $(ARFLAGS) `cygpath -w $@` ${OBJS}} 
clean:
rm $(OBJ)
rm *.out

提前非常感谢。

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

如果所有文件都使用相对路径,那么一切都应该正常。即使是Microsoft编译器也可以构建subdir/file.cpp并将对象粘贴到objdir/file.o(cl subdir/file.cpp -o objdir/file.o)中。

提示:尽量在文件名中使用斜杠。总是

你可能遇到的唯一困难是绝对路径,如通常出现在include路径中的那样。/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 "$<")"),则有用

最新更新