Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Makefile目标依赖于不同的路径?_Makefile_Gnu Make - Fatal编程技术网

如何使Makefile目标依赖于不同的路径?

如何使Makefile目标依赖于不同的路径?,makefile,gnu-make,Makefile,Gnu Make,我为这个模棱两可的标题道歉,由于我对GNU make缺乏了解,我想不出一个简单的表达方式 我正在为一个小项目编写一个简单的Makefile,并试图通过使用对象的基本名称(不带路径)作为目标,使其能够生成单个对象: $(BASE_OBJS) : %.o : $(SRC_DIR)/%.c $(OBJDIR) $(INCLUDES) @echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]

我为这个模棱两可的标题道歉,由于我对GNU make缺乏了解,我想不出一个简单的表达方式

我正在为一个小项目编写一个简单的Makefile,并试图通过使用对象的基本名称(不带路径)作为目标,使其能够生成单个对象:

$(BASE_OBJS) : %.o : $(SRC_DIR)/%.c $(OBJDIR) $(INCLUDES)                        
    @echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]                          
    @$(CC) -c $< $(CFLAGS) -o $(OBJDIR)/$@

您的主要目标和先决条件集必须使用完整路径,因为make就是这样工作的。所以你必须有这样的东西:

$(OBJS) : $(OBJDIR)/%.o: $(SRC_DIR)/%.c $(INCLUDES)       
        @echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]                          
        @$(CC) -c $< $(CFLAGS) -o $@
$(BASE_OBJS) : %.o : $(OBJDIR)/%.o

“我正试图通过使用它们的基本名称(没有路径)作为目标来生成单个对象。”我知道每次都会重建目标,我发布了我的问题,以了解是否有办法防止它发生。关于误用:这是我的第一个想法,但后来我回忆起,例如Linux内核构建系统允许从主文件夹按名称构建*.dtb文件,而无需进行不必要的重建,我认为这是可能的。
$(OBJS) : $(OBJDIR)/%.o: $(SRC_DIR)/%.c $(INCLUDES)       
        @echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]                          
        @$(CC) -c $< $(CFLAGS) -o $@
$(BASE_OBJS) : %.o : $(OBJDIR)/%.o