具有多个源文件夹的Makefile

时间:2014-03-30 19:17:40

标签: c++ makefile

我正在尝试为我的C ++项目编写一个make文件

我有以下源结构

项目文件夹内容:

main.cpp
lib/
include/
src/

如名称所示'main.cpp'包含main()函数,include包含* .h文件和src hold * .cpp文件(如果其他子文件夹包含其他来源)

我想要实现的是一个makefile,它作为目标编译main.cpp和所有包含的源递归,没有指定所有的源名称或者每次创建或添加时都使用make文件添加源

非常感谢任何帮助或解决此问题的好教程

1 个答案:

答案 0 :(得分:0)

不确定您使用的Makefile的风格,或者您正在构建的操作系统,但是这里有一些关于GNU Make和类似unix的环境的想法

  1. 使用单个make(而不是在子目录上递归调用make)。
  2. 使用前缀规则生成* .cpp到* .o
  3. 现在考虑在每个源子目录中存在一个src.mk,该子目录用每个目录中的实际* .cpp填充SRC变量:

    SRC+= $(addprefix $(ROOT)/src/, \
        Source1.cpp \
        Source2.cpp \
    )
    
  4. ...在Makefile中你可以有一个

    -include src.mk
    OBJ=$(SRC:.cpp=.o)
    executable: $(OBJ)
    
  5. 现在接下来就是能够生成src.mk:你可以有一个前缀规则并依赖shell脚本:

    %/src.mk: %/
         gensrc $(dir $@)
    
  6. gensrc是一个shell脚本,为参数的每个子目录添加-include subdir/src.mk,并在参数目录中创建带有*.cpp的SRC变量。

    < / LI>

    希望这会给你一些想法。