3

假设我有如下目录:

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,然后“加入”它们?

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

谢谢!

4

3 回答 3

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),因此实际上您不需要关心它。

于 2009-11-22T19:48:17.983 回答
1

一个 CMakeLists.txt 文件:

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

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

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

于 2010-01-16T01:04:42.960 回答
0

有一个公开的论点是递归 make 是否是一件好事。请参阅此博客条目以了解相对最新的赞成和反对论文的调查。

于 2009-11-22T19:52:57.160 回答