我有一个 Linux GNU C 项目,需要使用通用的 C 源代码库但不同的 makefile 为两个不同的硬件设备构建输出。目前,我在同一个文件夹中有两个 makefile,每个设备一个,当我更改代码时,我必须首先执行“make clean”来制作第一个模型,然后“make clean”来制作第二个模型。这是因为它们使用不同的编译器和处理器。即使代码文件没有更改,我也必须为其他设备重新编译它。
我想要做的是为第二个模型使用不同的文件夹,因此它存储 *.d 和 *.o 文件的单独副本。我不必“make clean”,只需重新编译更改后的源代码。我研究过 makefile 语法,作为 Linux 新手,我对这些东西的神秘本质只能摸不着头脑。
我正在考虑的一种方法是将 model_1 文件夹中的 .c 和 .h 文件更新到 model_2 文件夹中。有人可以为我提供一个简单的 makefile,该文件仅将较新的 *.c 和 *.h 文件从一个文件夹复制到另一个文件夹吗?
或者,必须有一种方法来拥有一个公共(public)源文件夹和单独的输出文件夹,这样就不需要重复的源文件。任何有助于实现这一目标的帮助都将受到赞赏。如果您想查看它们,我可以提供 makefile。
最佳答案
您希望在编译时将生成的文件(对象和依赖项)放入每个构建类型的单独文件夹中。这是我所做的,可能对你有用:
$(PRODUCT1_OBJDIR)/%.o $(PRODUCT1_OBJDIR)/%.d: %.cpp
@mkdir -p $(@D)
$(CXX) $(PRODUCT1_DEPSFLAGS) $(CXXFLAGS) $(INCLUDE_DIR) $< -o $(PRODUCT1_OBJDIR)/$*.o
$(PRODUCT2_OBJDIR)/%.o $(PRODUCT2_OBJDIR)/%.d: %.cpp
@mkdir -p $(@D)
$(CXX) $(PRODUCT2_DEPSFLAGS) $(CXXFLAGS) $(INCLUDE_DIR) $< -o $(PRODUCT2_OBJDIR)/$*.o
$PRODUCT1_OBJDIR 和 $PRODUCT2_OBJDIR 是您希望存储生成的文件的目录的变量名称。这将检查依赖项的更改并在需要时重新编译。
如果您仍然遇到问题,请返回反馈,我们会尽力解决您的问题。
关于c - 在 Linux 中使用 makefile 将源文件更新到不同的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845337/