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



我有一个Linux GNU C项目,它需要为两个不同的硬件设备构建输出,使用通用的C源代码库,但生成文件不同。目前,我在同一个文件夹中有两个makefile,每个设备一个,当我对代码进行更改时,我必须首先执行"make clean"来制作第一个模型,然后执行"make clear"来制作第二个模型。这是因为它们使用不同的编译器和处理器。即使代码文件没有更改,我也必须为其他设备重新编译它。

我想做的是为第二个模型使用不同的文件夹,这样它就可以存储*.d和*.o文件的单独副本。我不需要"清理",只需要重新编译更改后的源代码。我已经研究过makefile语法,作为Linux的新手,我只能对这些东西的神秘本质刮目相看。

我正在考虑的一种方法是更新.c&h文件从model_1文件夹中放入model_2文件夹中。有人能为我提供一个简单的makefile吗?它只会将较新的*.c和*.h文件从一个文件夹复制到另一个文件夹?

或者,必须有一种方法来拥有一个公共的源文件夹和单独的输出文件夹,这样就不需要重复的源文件。感谢为实现这一目标所提供的任何帮助。如果你想看的话,我可以提供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是要存储生成文件的目录的变量名。这将检查依赖项的更改,并在需要时重新编译。

如果你仍然有问题,请反馈,我们会尽力解决你的问题。

您可以将源文件编译为不同目录中的对象文件(在Unix中,"文件夹"这个词并不合适)。您只需要设置适当的make规则。你可能会使用其他构建器,比如omake,scons。。。

您可以使用重制版来调试GNUMakefile-s。你可以在这样的规则内

$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(COMPILE.c) -c $^ -o $@

您可以设置(在Makefile的早期)变量,例如

OBJDIR:=obj-$(shell uname -m)

或者更好的

我确实建议阅读GNUmake的手册;它介绍了makefiles。

这可以通过makepp的存储库机制轻松实现。如果您调用makepp -R../src ARCH=whatever,那么它将象征性地链接当前目录下../src的所有部分并在此处编译。

您甚至可以创建一个文件.makepprc,并输入任何特定于该体系结构的选项,这样您就永远不会混淆在哪里调用哪个命令。

如果您的不同体系结构具有相同的生成文件(如生成的源代码),您甚至可以在../src中进行构建,而其他体系结构将获得不依赖于您当前编译选项的所有内容。

还有很多东西要做。除了做GNU make所能做的几乎所有事情之外,还有很多更有用的事情,你甚至可以用一些Perl编程来扩展你的makefile

最新更新