多目录的Makefile编写

时间:2022-12-11 19:06:54
单个文件的Makefile我还能够写个简单的。但是如下的Makefile怎么写呢?我网上找的都达不到我的要求。
我的例子是如下图:
       Game  我有一个文件夹,里面只有两个文件夹(private和share)。没有其他文件了
          -parivate  
                  -main.cpp
                  -echo.h
                  -echo.cpp
                  -Makefile
          -share
                -print.h
                -print.cpp
                -output.h
                -output.cpp
这样一个目录层次:我想要达到的要求是,share是一个共享文件夹。里面包含公用函数。 private是一个私有文件夹里面就是具体的单独实现。 Game下没有Makefile,我只想在private下生成可执行文件。 main.cpp调用了print.h和output.h和echo.h的函数。(假设每个.h里面只有一个打印函数)。 我也可以在Game下再新建一个私有文件夹 file1。 里面也需要调用share里面的函数。 但是我只要在file1下面再写一个Makefile就行了  那应该怎样做呢?Makefile 啊。。。。 求救

7 个解决方案

#1


Makefile里可以写shell语法, 比如你可以在一个Makefile里make -C xxx/makefile执行其他的Makefile

#2


try CMake

#3


这个好像不难。



#结果是main 如果有其他依赖项自己添加 比如-I等CXXFLAG
main:main.o  echo.o print.o output.o
g++ -o  $@ $^

%.o:%.cpp
g++ -c -o $@ $^

%.o:../share/%.cpp
g++ -c -o $@ $^

 

#4


为啥不用autotools啊?!!!!

#5


引用 1 楼 qq120848369 的回复:
Makefile里可以写shell语法, 比如你可以在一个Makefile里make -C xxx/makefile执行其他的Makefile


正解!
1 make:
-C dir, --directory=dir
            Change to directory dir before reading the makefiles or doing any‐
            thing else.  If multiple -C options are specified, each is  inter‐
            preted  relative to the previous one: -C / -C etc is equivalent to
            -C /etc.  This is typically used  with  recursive  invocations  of
            make.

2 install
 -d, --directory
              treat all arguments as directory names; create all components of the specified directories

有这两个您的问题应该可以搞定了

#6


http://blog.csdn.net/subfate/article/details/6279898。
思想如下:
把不是main之外的所有模块作为库,生成.a,最后与main链接生成可执行文件。

像楼主的例子,将share目录的文件生成一个公共库,无论是private还是file1,只要能链接到那个目录中的库就OK。

#7


我的文件是纯C,我是这样做的。把-share目录下的文件生成.o文件,然后在parivate 目录里编译的时候加上依赖这些.o文件。当然,头文件的包含就不用说了吧

#1


Makefile里可以写shell语法, 比如你可以在一个Makefile里make -C xxx/makefile执行其他的Makefile

#2


try CMake

#3


这个好像不难。



#结果是main 如果有其他依赖项自己添加 比如-I等CXXFLAG
main:main.o  echo.o print.o output.o
g++ -o  $@ $^

%.o:%.cpp
g++ -c -o $@ $^

%.o:../share/%.cpp
g++ -c -o $@ $^

 

#4


为啥不用autotools啊?!!!!

#5


引用 1 楼 qq120848369 的回复:
Makefile里可以写shell语法, 比如你可以在一个Makefile里make -C xxx/makefile执行其他的Makefile


正解!
1 make:
-C dir, --directory=dir
            Change to directory dir before reading the makefiles or doing any‐
            thing else.  If multiple -C options are specified, each is  inter‐
            preted  relative to the previous one: -C / -C etc is equivalent to
            -C /etc.  This is typically used  with  recursive  invocations  of
            make.

2 install
 -d, --directory
              treat all arguments as directory names; create all components of the specified directories

有这两个您的问题应该可以搞定了

#6


http://blog.csdn.net/subfate/article/details/6279898。
思想如下:
把不是main之外的所有模块作为库,生成.a,最后与main链接生成可执行文件。

像楼主的例子,将share目录的文件生成一个公共库,无论是private还是file1,只要能链接到那个目录中的库就OK。

#7


我的文件是纯C,我是这样做的。把-share目录下的文件生成.o文件,然后在parivate 目录里编译的时候加上依赖这些.o文件。当然,头文件的包含就不用说了吧