【发布时间】:2012-10-22 12:12:29
【问题描述】:
我有一个项目,其中有一些文件夹恰好包含同名的源文件。
我的源代码树如下所示:
project.pro
foo/
conflict.h
conflict.cpp
bar/
conflict.h
conflict.cpp
some.h
other.h
files.h
main.cpp
默认情况下,qmake 会生成一个 Makefile,它会生成这样的构建树:
conflict.o
main.o
target
其中conflict.o 是为foo/conflict.cpp 和foo/conflict.h 生成的目标文件。
我不能更改它们的名称,因为它们是使用外部工具生成的,并且强制使用不同的文件名将意味着更改它们的内容,所以这不是一个选项。
我也不想使用 qmake SUBDIRS 模板,因为这意味着 (1) 每个子目录都是作为库单独构建的,因此整个构建过程非常复杂(在至少我的眼睛)和(2)在顶级目录中我不能有任何源文件。还是我错了?
我不能告诉 qmake 将目标文件写入构建目录中的单独目录吗?所以我的构建树看起来像这样:
foo/
conflict.o
bar/
conflict.o
main.o
target
或者是否有其他解决方案既不需要重命名源文件也不需要引入像静态库这样复杂的东西?我简直不敢相信 Qt 多年来都没有解决这个(在我看来很简单)问题。 (我在 4 年前就已经遇到过这个问题,但可以重命名该项目中的文件,而在这里我不能。)
如果它很重要:我在带有 G++ 的 Ubuntu 和带有 mingw32 的 Windows 上都使用 Qt 4.8。
【问题讨论】:
-
@NikosC。我可以为顶级文件提供一个 pro 文件,该文件将链接到其他库 + 一个顶级 SUBDIRS pro 文件,该文件将具有子目录
.?这将要求我还覆盖此子目录的 .pro 文件,使其与整个应用程序的顶级 .pro 文件不同。我希望你明白我的意思。我只是想避免必须将所有顶级文件移动到物理子目录中。 -
您应该只为
foo使用一个额外的项目文件,并为顶级目录和bar保留现有的一个。另一种选择是符号链接冲突的文件名:ln -s bar/conflict.cpp bar/conflict_bar.cpp,然后在项目文件中使用符号链接。 -
@NikosC。谢谢,但符号链接也不是选项,因为所有生成的文件也被放入生成的 .pri 文件中以包含在某些 .pro 文件中。我目前正在完全重写构建过程以使用 SUBDIRS。我对 qmake 感到非常失望,我真的需要这样做,但我看不到更好的方法......所有其他解决方案听起来都是错误的。如果我只为
foo创建了额外的.pro,我如何告诉主要的.pro 使用它?我不能在主文件中同时使用 subdirs+app 模板,可以吗?