makefile如何在子文件夹中生成obj文件?

时间:2015-12-22 15:42:18

标签: makefile

我想在子文件夹中生成我的obj文件,我试过这个:

lib/*.o: source/*.cpp                                                                                         
         clang++ $(CC_FLAGS) -c -Iinclude source/*.cpp  

但它仍然在项目根目录中而不是在lib /

中生成obj文件

我想要的项目树:

Project/
        source/(cpp files)
        include/(header files)
        lib/(obj files)

1 个答案:

答案 0 :(得分:0)

你没有显示你当前的makefile,但我怀疑它是错误的。但是,由于我们无法看到它,我们将单独留下它。

编译器不支持将多个目标文件写入其他目录。如果您传递多个源文件以及-c标志,那么它将写出多个目标文件,但仅写入当前目录...因为您发现无法在{1}}标志上指定-o标志编译生成多个输出文件的行。

您可以将食谱更改为:

cd lib && clang++ $(CC_FLAGS) -c -I../include ../source/*.cpp

这将导致所有目标文件被写入lib目录,因为它现在是当前目录。

但是,将它放入makefile并不简单,因为make本身设计为只有一个配方创建一个目标。但是,您现有的makefile也存在此问题,而您也没有显示。