Hap*_*cky 12 c++ unix gnu makefile sed
Unix平台上的C++程序员使用什么方法来创建和管理Makefile?
我在我的项目中使用手工制作的Makefile,但它们不处理头文件更改和其他依赖项.我google了一下,在这里找到了一个很好的解决方案.
但是我在sed命令中遇到了一个问题 -
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
Run Code Online (Sandbox Code Playgroud)
问题在于第3个表达式"-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)
Run Code Online (Sandbox Code Playgroud)
除了解决这个问题之外,我还想了解第一个问题的一些提示/指示.
Joh*_*ter 25
gcc/g ++可以通过-M
选项系列为您生成依赖项.以下通过指定如何在.depends
给定源文件的情况下生成文件来工作.通过执行-include $(DEPS)
$(DEPS)被识别为目标,并且将在源文件更改时构建/重建.
CXX = g++
CXXFLAGS = -Wall -O3
LDFLAGS =
TARGET = testcpp
SRCS = main.cc x.cc foo.cc
OBJS = $(SRCS:.cc=.o)
DEPS = $(SRCS:.cc=.depends)
.PHONY: clean all
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET)
.cc.o:
$(CXX) $(CXXFLAGS) -c $< -o $@
%.depends: %.cc
$(CXX) -M $(CXXFLAGS) $< > $@
clean:
rm -f $(OBJS) $(DEPS) $(TARGET)
-include $(DEPS)
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经尝试了你的makefile,而sed语句似乎删除尾随反斜杠就好了.尝试更简单的东西,比如:
backslash: @echo " \\" > $@ test: backslash @echo without sed: @cat backslash @echo with sed: @sed -e 's/ *\\$$//' < backslash
编辑:
好的,现在我迷上了.你能试试这些实验并告诉我们结果吗?
Change the last character to 'z' : s/.$/z/ Change a trailing backslash to 'z' : s/\\$/z/ Change a trailing backslash to 'z' : sm\\$mzm Delete a trailing backslash : s/\\$// Delete spaces and a trailing backslash: s/ *\\$// Try all of these inside and outside of Make, with '$' and '$$'.
归档时间: |
|
查看次数: |
16262 次 |
最近记录: |