c - 在 Linux 中使用 makefile 将源文件更新到不同的文件夹

标签 c linux compilation makefile gnu

我有一个 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/

相关文章:

linux - 制作应用程序时使用的 volatile 变量

c - 如何让gcc编译器知道某个文件在哪里

尝试删除文件中的 'return' 的 Linux 脚本

scala - 编译后 SBT 应用任务

c - 如何重新设计此代码以避免转到

c - 在 while 循环中返回 char*

c - 如何计算二进制数C中的最大块长度

c - 如何将值附加到转换为指针的结构中的 struct sembuf ?

c++ - 自动依赖生成

perl - 无法编译我的 perl 脚本。让一切正常工作的最简单方法是什么?