我的项目有混合源文件(由于第三方代码),所以我们有一些.cpp和一些.cxx文件。
继我之前的问题here后,我有以下makefile:
# Folders
SRCDIR = src
OBJDIR = obj
SUBFOLDERS = test test/test2
OBJSUBFOLDERS = $(OBJDIR) $(addprefix $(OBJDIR)/, $(SUBFOLDERS))
SRCSUBFOLDERS = $(SRCDIR) $(addprefix $(SRCDIR)/, $(SUBFOLDERS))
# Just for me so I can read my own makefile :o
_TARGET = $@
_DEPEND = $<
# Get sources from /src and /src/test/ and /src/test/test2/
SOURCES = $(foreach dir, $(SRCSUBFOLDERS), $(wildcard $(dir)/*.cpp $(dir)/*.cxx))
# Source file without the /src at the start, then take the basename, then add .o, then add obj/ to the front
OBJECTS = $(addprefix $(OBJDIR)/, $(addsuffix .o, $(basename $(patsubst src/%, %, $(SOURCES)))))
# Main target 'make debug'
debug: debugging $(OBJECTS)
@echo building: gcc $(OBJECTS) -o out.exe
# Compiling each file
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp <---- ISSUE HERE
g++ -c $(_DEPEND) -o $(_TARGET)
debugging:
@echo $(SOURCES)
@echo $(OBJECTS)
所以我生成了一个源文件和目标文件列表。对象是.cpp和.cxx。所以我的规则$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
仅适用于.cpp文件。我试图让它$(OBJDIR)/%.o: $(SRCDIR)/%.c*
,但那不起作用。如何使此规则通用以处理任何一个。或者有更好的方法吗?
如果我从$(dir)/*.cxx
删除SOURCES =
,那么这一切都有效,但只适用于.cpp文件。
更新
以下是我得到的输出:
SOURCES: src/main.cpp src/test/test.cpp src/test/test2.cxx
OBJECTS: obj/main.o obj/test/test.o obj/test/test2.o
Error: No rule to make target 'obj/test/test2.o', needed by 'debug'
答案 0 :(得分:1)
您可以有多个规则来构建来自不同扩展程序的目标。
例如,默认的Makefile规则已经包含了从.cpp
或make
构建$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
g++ -c $(_DEPEND) -o $(_TARGET)
$(OBJDIR)/%.o: $(SRCDIR)/%.cxx
g++ -c $(_DEPEND) -o $(_TARGET)
的规则。 properties
只使用后缀listed for the .SUFFIXES
target搜索第一个数学规则。
在您的情况下,您只需要两条规则:
{
"rules": {
"maintenance" : {
"$uid" : {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"properties" : {
".read": true,
".write": false
}
}
}