【发布时间】:2017-03-30 22:07:26
【问题描述】:
Unix 平台上的 C++ 程序员使用什么方法来创建和管理 Makefile?
我为我的项目使用了手工制作的 Makefile,但它们不处理头文件更改和其他依赖项。我搜索了一下,找到了一个很好的解决方案here。
但是我在 sed 命令中遇到了问题 -
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
问题在于第三个表达式“-e 's/ *\$$//'。 它不起作用。它应该删除尾随反斜杠。我知道那里必须有双美元,因为这是 Makefile 的一部分。谁能告诉我这里出了什么问题?
这是完整的 Makefile -
CC=g++
CFLAGS=-g -Wall
LIBS=-lpthread
OBJS=file1.o file2.o
TARGET=testProg
$(TARGET) : $(OBJS)
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
%.o : %.cpp
$(CC) -MMD -c -o $@ $< $(CFLAGS)
@cp $*.d $*.P; \
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
rm -f $*.d
-include $(OBJS:%.o=%.P)
clean :
rm -f $(TARGET) $(OBJS)
all : $(TARGET)
除了这个问题的解决方案,我还想要一些关于我的第一个问题的提示/指针。
【问题讨论】:
-
嗯,我在 Makefile 中使用第三个表达式进行了 sed 调用,它删除了尾随反斜杠。更多信息?
-
Jefromi,已更新 - 添加了完整的 Makefile
-
等一下,你用的是什么牌子的?
-
我正在使用 GNU Make 3.81