使用子目录进行OMake编译

时间:2009-07-05 00:21:04

标签: c++ omake

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

示例目录结构:

myproject:OMakeroot,OMakefile,main.cpp

myproject / headers:file1.h

myproject / src:file1.cpp


myproject OMakeroot内容:

open build / C

.SUBDIRS:。

myproject Omakefile内容:

CXX = g ++

CXXFLAGS = -Wall

包含+ =标题src

CXXProgram(myapp,主文件1)


header和src目录中的OMakefiles为空,不确定是否需要包含任何内容。

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

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

3 个答案:

答案 0 :(得分: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,主文件1)

     

应该是

CXXProgram(myapp, main src/file1)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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