문제

이 작은 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이 추가되는 이유는 무엇입니까?

생성 된 makefiles는 그것을 추가하지 않고 오히려 그것을 가정합니다. 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는 accetable 솔루션이 아닙니다)

도움이 되었습니까?

해결책

버전의 첫 부분에서 나옵니다. "lib"템플릿이 추가됩니다.

IMO 라이브러리 이름에 포함시키는 것이 좋습니다.이 컨벤션이 지속적으로 따르지 않는 Windows에서 발생하는 악명 높은 "DLL Hell"을 피하기 때문에 ... 주요 버전 번호를 포함하여 라이브러리 파일을 명명하여 사용자가 할 수 있습니다. 여러 버전이 설치되어 있으며 프로그램은 실행 시간에 올바른 버전을 사용합니다. DLL 버전은 전체 프로젝트 릴리스 버전과 동일 할 필요가 없습니다. Linux 및 OSX에서 버전은 파일 이름에 추가됩니다 (예 : Librecorder.so.0.0.1)

Visual C ++를 사용하는 경우 항상 다른 버전에서 생성 된 코드 이후 사용 된 시각적 CI 버전을 나타내는 태그를 추가합니다.

어쩌면이 동작을 비활성화하기 위해 버전의 정의를 생략 할 수는 있지만 Windows의 경우 지금 당장 확인할 수는 없습니다 (Linux에서는 공유 라이브러리가 항상 버전 번호가있는 경우 버전 1.0.0을 가정합니다.)

다른 팁

이 시도:

CONFIG += skip_target_version_ext

유용한 장난:

VERSION = 0.0.1
win32:TARGET_EXT = .dll

이것으로 당신은 얻을 것입니다 :

  • Linux : librecord.so, ..., librecord.so.0.0.1
  • Windows : Record.dll
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top