0

纵观 OMake 文档,似乎每当使用来自子目录的源时——它们总是首先编译成静态库。这总是必要的吗?我可以在不构建库的情况下编译和链接所有内容吗?我一直在尝试为此编写 OMakefiles,但没有成功。

示例目录结构:

我的项目:OMakeroot、OMakefile、main.cpp

我的项目/标题:file1.h

我的项目/src:file1.cpp


myproject OMakeroot 内容:

开放构建/C

.子目录:。

myproject Omakefile 内容:

CXX = g++

CXXFLAGS = -墙

包括 += 标头 src

CXXProgram(myapp, main file1)


headers 和 src 目录中的 OMakefiles 是空的,不确定其中是否需要任何内容​​。

当我运行 omake myapp 时出现错误:

不知道如何构建“myapp”所需的“file1.o”

4

3 回答 3

1

以供将来参考,以防线程消失,这是发布在Maxicat所指线程上的解决方案(改写为仅显示解决方案)。

不必编译成静态库,但默认假设是每个目标文件都与源文件位于同一目录中。

包括 += 标头 src

INCLUDES 仅适用于头文件。你需要

INCLUDES += $(dir headers)
.SUBDIRS: src

(注 1 - 前两行的顺序很重要。按照我的编写方式,src 目录将获得更新后的 INCLUDES;如果您不希望这样,请重新排序这两行。)

(注 2 - 上面需要一个 src/OMakefile 文件,即使是一个空文件也可以。你可以写类似的东西

.SUBDIRS: src
   return # A no-op body

将 ./src/OMakefile“内联”到 ./OMakefile 中)

CXXProgram(myapp, main file1)

应该

CXXProgram(myapp, main src/file1)
于 2009-08-13T03:02:42.127 回答
0

尝试src/file1,以便 omake 知道它需要构建src/file1.o而不是file1.o,因此需要src/file1.cpp而不是file1.cpp(它不存在)。

于 2009-07-05T00:33:51.533 回答
0

在 Omake 邮件列表上解决了这个问题,这里的线程链接只是为了完整性:http ://lists.metaprl.org/pipermail/omake/2009-July/002094.html

于 2009-07-13T19:51:44.563 回答