查看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”
答案 0 :(得分:1)
为了将来参考,如果线程消失,这里是Maxicat引用的线程上发布的解决方案(重新编写以显示解决方案)。
不你必须编译成静态库的情况,但是 默认假设是每个目标文件都是相同的 目录作为源文件。
包含+ =标题srcINCLUDES仅适用于头文件。你需要
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