【问题标题】:Makefiles: Get .cpp from one directory and put the compiled .o in another directoryMakefiles:从一个目录获取 .cpp 并将编译后的 .o 放在另一个目录中
【发布时间】:2011-05-05 13:28:16
【问题描述】:

我正在为移动设备(Windows Mobile 6 和 Android)开发一个跨平台的 2D 引擎。我的 Windows 版本已经准备就绪,但我仍然需要确保在 Android 上提供相同的功能。

我想要的是项目根目录中的一个Makefile,以及项目本身和测试应用程序的几个Makefile

Makefile
---Engine
------Makefile
------src
------bin
------intermediate
---Tests
------TestOne
---------Makefile
---------src
---------bin
---------intermediate
------TestTwo
---------Makefile
---------src
---------bin
---------intermediate

我的尝试基于以下Makefile

 include ../makeinclude

 PROGS = test1
 SOURCES = $(wildcard *.cpp)

 # first compile main.o and start.o, then compile the rest
 OBJECTS = main.o start.o $(SOURCES:.cpp=.o)

 all: $(PROGS)

 clean:
    rm -f *.o src

 test1: $(OBJECTS)
    $(LD) --entry=_start --dynamic-linker system/bin/linker -nostdlib -rpath system/lib -rpath $(LIBS) -L $(LIBS) -lm -lc -lui -lGLESv1_CM $^ -o ../$@ 
    acpy ../$(PROGS)
 .cpp.o:
    $(CC) $(CFLAGS) -I $(GLES_INCLUDES) -c $*.cpp $(CLIBS)

但是,我对这些东西不是很好。我想要的是它获取src文件夹中的.cpp,将它们编译为.o并将它们放入intermediate文件夹中,最后将.o编译为已编译的exe并将其放入bin 文件夹。

我已经设法像这样工作了:

cd intermediate && rm -f *.o

但是,我无法用它来检索 .cpp,编译它们并将它们放入 intermediate 文件夹中。

我查看了其他几个Makefiles,但没有一个做我想做的事情。

感谢任何帮助。

【问题讨论】:

标签: makefile


【解决方案1】:

有不止一种方法可以做到这一点,但最简单的是在 TestOne 中运行,将 Src/foo.cpp 中的 Intermediate/foo.o 和 Intermediate/foo.o 中的 test1 制作出来,如下所示:

# 这个makefile 驻留在TestOne 中,应该从那里运行。 include makeinclude # 如果需要,调整 makeinclude 的路径。 PROG = bin/test1 来源 = $(通配符 Src/*.cpp) # 因为 main.cpp 和 start.cpp 应该在 Src/ 中 # 源代码,无需单独列出 对象 = $(patsubst Src/%.cpp,Intermediate/%.o,$(SOURCES)) 全部:$(PROG) 干净的: rm -f 中级/*.o bin/* $(PROG): $(对象) $(LD) $(BLAH_BLAH_BLAH) $^ -o ../$@ $(OBJECTS): 中间/%.o : Src/%.cpp $(CC) $(CFLAGS) -I $(GLES_INCLUDES) -c $&lt $(CLIBS) -o $@

【讨论】:

  • 谢谢! :D 这正是我所需要的。我喜欢 makefile(比 Visual Studio 的 vcproj 更多),但它们很难设置。 :(
  • 我也喜欢它们,但是它们有一些严重的缺点和很长的学习曲线……而且由于我没有实际测试过,所以有一个错误。等一下……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多