7

同じ名前のソース ファイルをたまたま含むいくつかのフォルダーを含むプロジェクトがあります。

ソースツリーは次のようになります。

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年前に嫌っていますが、そのプロジェクトのファイルの名前を変更することはできましたが、ここではできません。)

重要な場合:G ++を使用したUbuntuとmingw32を使用したWindowsの両方でQt 4.8を使用しています。

4

1 に答える 1

2

に縛られてい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 に移行するには多少の労力が必要になる場合がありますが、要件があれば試してみます。

于 2012-11-01T21:38:05.613 に答える