我有一组.cpp文件需要编译。这些.cpp文件位于一个分层目录结构中。我希望相应的.o文件都放在一个构建文件夹中。
以下是如何让GNU make列举文件:
SRCS = \
$(wildcard $(CODE)/**/*.cpp) \
$(wildcard $(CODE)/AlgebraLibraries/**/*.cpp) \
$(wildcard $(CODE)/Calculator/Environments/**/*.cpp)
BARE_SRCS = $(notdir $(SRCS))
BARE_OBJS = $(BARE_SRCS:.cpp=.o)
OBJS = $(addprefix $(BUILD)/, $(BARE_OBJS))
做到这一步后,我不知道如何创建规则以从.cpp文件创建.o文件。 直觉上,我想做的是以下伪代码:
for i=0, N do # <-- a for-loop!
$(OBJS)[i]: $(SRCS)[i] # <-- the rule!
$(CPP) -c $(SRCS)[i] -o $(OBJS)[i] # <-- the recipe
end
当然,这不是有效的GNU make代码,但我相信你理解我在此尝试做什么。以下方法无效。
%.o: %.cpp
$(CPP) -c $< -o $@
这行不通,因为GNU make会匹配百分号,假定.o文件与.cpp文件放在一起。
另一种方法是手动枚举所有规则作为显式规则,虽然我知道这种方法能够奏效,但会非常繁琐。肯定有更好的办法!
我一直在研究GNU make生成规则的能力,但似乎没有办法避开内置逻辑进行生成。如果能利用一些流程控制语句来生成所需规则就太好了,难道这对GNU make来说也太困难了吗?
总之,有没有办法使用GNU make实现我的目标呢?如果有,具体怎么做呢?
dir1/dir2/file.c
еҲӣе»ә$(BUILD)/dir1/dir2/file.o
пјҢеӣ дёәзӣ®еҪ•з»“жһ„$(BUILD)/dir1/dir2
дёҚеӯҳеңЁпјҢйӮЈд№ҲgccдјҡжҠұжҖЁеҗ—пјҹ - Tuxdudewildcard
构建文件列表会留下许多松散的尾巴。 - Beta