QMAKE:避免在不同文件夹中的文件名发生冲突而无需介绍库



我有一个带有一些文件夹的项目,这些文件夹恰好包含具有相同名称的源文件。

我的源树看起来像这样:

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.cppfoo/conflict.h 的对象文件。

我不能更改他们的名称,因为它们是使用外部工具生成的,并且强制强制文件名将暗示更改其内容,因此这不是一个选项。

我也不想使用qmake SUBDIRS 模板,因为这意味着(1)每个细胞都会单独构建为库,因此非常复杂的整体构建过程(在我眼中至少)和(2)在顶级目录中,我没有任何源文件。还是我错了?

我不能只告诉Qmake将对象文件写入构建目录中的单独目录吗?所以我的建筑树看起来像这样:

foo/
    conflict.o
bar/
    conflict.o
main.o
target

,还是没有其他解决方案不需要重命名源文件,也没有引入像静态库这样复杂的内容?我只是不敢相信QT多年来一直没有解决这个问题(在我看来很简单)。(我已经在4年前解决了这个问题,但可以重命名该项目中的文件,而我不能。)

如果重要的话:我在ubuntu上使用QT 4.8,带有G 和Windows和Mingw32。

您是否绑在qmake上?如果不是,则可以使用CMAKE。我刚刚用简单的cmakelists.txt验证了您的用途酶。

cmake_minimum_required (VERSION 2.6)
project (conflict)
add_executable(conflict foo/conflict.cpp bar/conflict.cpp main.cpp)

甚至包括顶级目录中的源文件(main.cpp)。正确构建可执行文件 - 对象文件是在

之类的子目录中创建的
./CMakeFiles/conflict.dir/main.cpp.o
./CMakeFiles/conflict.dir/bar/conflict.cpp.o
./CMakeFiles/conflict.dir/foo/conflict.cpp.o

cmake还包括对QT4的支持,以自动吸入所需的路径和库。可能需要一些努力才能从Qmake迁移到Cmake,但是鉴于您的要求,我会尝试一下。

最新更新