Gnu Make的递归性和朋友
Gnu Make's recursiveness and friends
也许我做错了什么,但当makefile看起来像这样时,make拒绝检查依赖项的时间戳。
# This makefile won't update the objects if you modify the .cpp files
# and it will only create them if they do not exist.
CC=g++
FL=-g
OBJECTD=../obj
SOURCED=../src
# Get all .cpp files in ../src
SOURCES=$(wildcard *.cpp)
# Convert .cpp to .o then add ../obj in front
OBJECTS=$(addprefix $(OBJECTD)/,$(patsubst %.cpp,%.o,$(SOURCES)))
# You sir must execute yourself whether you like it or not
.PHONY:all
all:$(OBJECTS)
@echo : Leaving `src`
# This wont work as expected ...
# @echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
# echoes Compiling logger.cpp
# But $(notdir $(patsubst %.o,%.cpp,$@)) will not be parsed
# correctly
$(OBJECTS):$(notdir $(patsubst %.o,%.cpp,$@))
@echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
@$(CC) $(FL) -c $(notdir $(patsubst %.o,%.cpp,$@)) -o $@
我相信它不会接受$(notdir $(patsubst %.o,%.cpp,$@))
即使文件上说
在具有多个目标的模式规则中(请参阅模式规则简介),"$@"是导致规则要运行的配方
分别对每个文件进行编译,效果很好
例如:
../obj/logger.o:logger.cpp
@echo : Compiling $<
@$(CC) $(FL) -c $< -o $@
+------------+
:eXtra信息:
+------------+
我试图实现的是从curect目录中读取源代码,检查它们是否已更改(如果已更改),继续编译它们,同时将对象放在/obj而不是当前目录
这是位于..中的生成文件/src,在父目录中还有另一个用于链接的src
我想在上工作的结构的图形表示
+--- Parent Directory ------+
| | | |
| | | |
bin obj inc src
您的规则:
$(OBJECTS):$(notdir $(patsubst %.o,%.cpp,$@))
...
不起作用,因为$@
在必备组件列表中没有值。来自手册:
[自动变量]不能在的先决条件列表中直接访问规则
试试这个:
$(OBJECTS): $(OBJECTD)/%.o : %.cpp
@echo : Compiling $<
@$(CC) $(FL) -c $< -o $@
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归模板成语如何避免基类是儿童课的朋友
- Gnu Make的递归性和朋友