(c)制作 - 积极的编译

时间:2009-11-22 19:39:44

标签: c++ recursion makefile compilation cmake

我们假设我有以下目录:

dir1
    main.cpp
    dir2
        abc.cpp
    dir3
        def.cpp
        dir4
            ghi.cpp
            jkl.cpp

让我们假设main.cpp包含dir2 / abc.cpp和dir3 / def.cpp,def.cpp包括dir4 / ghi.cpp和dir4 / jkl.cpp。

我的问题是,如何在dir1 /中有一个 Makefile / CMakeLists.txt,它递归地进入每个目录并编译* .cpp,然后“加入”它们?

对不起我的英文,希望我能很好地解释我的问题!

谢谢!

3 个答案:

答案 0 :(得分:1)

对于makefile,dir1 / Makefile应该:

  • 声明main.o依赖于dir2 / abc.o和dir3 / def.o
  • 声明如何创建dir2 / abc.o和dir3 / def.o

至于cmake,它会“自动”检测到这种依赖关系(二进制依赖于dir2 / abc.o和dir3 / def.o),所以你不需要关心它。

答案 1 :(得分:1)

一个CMakeLists.txt文件:

file(GLOB_RECURSE MAIN_SOURCES "dir1/*.cpp")

add_executable(MainExecutable ${MAIN_SOURCES})
# or
add_library(MyLibrary ${MAIN_SOURCES})

我不确定你“加入”消息来源是什么意思。我在这里假设你将它们组合成一个库或一个可执行文件。

答案 2 :(得分:0)

有一个开放的论点,递归制作是否是一件好事。请参阅this blog entry以获取有关相对最新的专业和会议论文的调查。