3

次のようなプロジェクト ファイルを含むこの小さな Qt プロジェクトがあります。

TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH += .
INCLUDEPATH += .

CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h

それからライブラリをコンパイルすると、qmake && nmakeファイルになります

record32.obj
record320.lib
record320.dll
...

lib と dll の名前に追加の 0 が追加されるのはなぜですか?

生成されたメイクファイルはそれを追加していないように見えますが、単にそれを想定してMakefile.Releaseいるだけです。

####### Files

SOURCES       = recorder.cpp release\moc_recorder.cpp
OBJECTS       = release\recorder.obj release\moc_recorder.obj
DIST          = 
QMAKE_TARGET  = recorder
DESTDIR        = release\ #avoid trailing-slash linebreak
TARGET         = record320.dll
DESTDIR_TARGET = release\record320.dll

どうすればそれを防ぎ、ライブラリに好きな名前を付けることができますか?

(makefile.release を手動で修正することは、受け入れ可能な解決策ではないことに注意してください)

4

3 に答える 3

7

VERSIONの最初の部分から来ています。「lib」TEMPLATE が追加されています。

IMO ライブラリ名にそれを含めることをお勧めします。これは、この規則が一貫して守られていない Windows で発生する悪名高い「DLL Hell」を回避するためです...ライブラリ ファイルにメジャー バージョン番号を含める名前を付けることにより、ユーザーは次のことができます。複数のバージョンがインストールされていれば、プログラムは実行時に正しいバージョンを使用します。DLL のバージョンは、プロジェクト全体のリリース バージョンと必ずしも同じである必要はありません。Linux および OSX では、バージョンがファイル名に追加されます (例: librecorder.so.0.0.1)。

[Visual C++ を使用している場合は、異なるバージョンで生成されたコードもほとんど互換性がないため、使用した Visual CI のバージョンを示すタグも常に追加します。]

VERSION の定義を省略してこの動作を無効にできるかもしれませんが、現時点では Windows でそれを確認できません (共有ライブラリに常にバージョン番号がある Linux では、バージョン 1.0.0 を想定しているだけです)。

于 2009-01-01T14:42:23.247 に答える