Visual studio 2015 qMake:如何在C++;
我试图在qMake*.pro文件中指定变量,以便在实际代码(VS 2015项目)中使用宏 我确实有这样的工作示例:Visual studio 2015 qMake:如何在C++;,visual-studio-2015,qmake,Visual Studio 2015,Qmake,我试图在qMake*.pro文件中指定变量,以便在实际代码(VS 2015项目)中使用宏 我确实有这样的工作示例: DEFINES += COPYRIGHT_STRING="\"$${QMAKE_TARGET_COPYRIGHT}\"" DEFINES += VERSION_STRING="\"$${QMAKE_TARGET_PRODUCT} $${VERSION}\"" 我还需要字符串3.4的宏。我尝试了不同的版本写下来,但我总是得到以下错误 RC : fatal error RC1107:
DEFINES += COPYRIGHT_STRING="\"$${QMAKE_TARGET_COPYRIGHT}\""
DEFINES += VERSION_STRING="\"$${QMAKE_TARGET_PRODUCT} $${VERSION}\""
我还需要字符串3.4
的宏。我尝试了不同的版本写下来,但我总是得到以下错误
RC : fatal error RC1107: invalid usage; use RC /? for Help
我尝试了以下几种变体,可能还有一两种我不记得了
DEFINES += "LATEST_PROCESSABLE_VERSION=3.4"
DEFINES += LATEST_PROCESSABLE_VERSION=\"3.4\"
DEFINES += LATEST_PROCESSABLE_VERSION="\"3.4\""
DEFINES += LATEST_PROCESSABLE_VERSION=\\\"3.4\\\"
如果省略定义变量LATEST\u PROCESSABLE\u VERSION
的那一行,那么一切都可以正常编译(包括上面的工作示例)
我的文件通常如下所示:
win32:TEMPLATE = vcapp
!win32:TEMPLATE = app
QT += core xml network
CONFIG += console
CONFIG += no_keywords
#C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
QMAKE_CXXFLAGS += /wd4290
VERSION = 3.2.0.3
QMAKE_TARGET_COMPANY = APP GMBH
QMAKE_TARGET_PRODUCT = Fancy Application
QMAKE_TARGET_DESCRIPTION = Does fancy stuff
QMAKE_TARGET_COPYRIGHT = COPYRIGHT (C) $${QMAKE_TARGET_COMPANY} 2018 - ALL RIGHTS RESERVED - FOR INTERNAL USE ONLY
DEFINES += DECODER_COPYRIGHT_STRING="\"$${QMAKE_TARGET_COPYRIGHT}\""
DEFINES += DECODER_VERSION_STRING="\"$${QMAKE_TARGET_PRODUCT} $${VERSION}\""
DEFINES += LATEST_PROCESSABLE_VERSION="\"3.4\""
# set application icon
RC_ICONS = Application.ico
INCLUDEPATH += ../FancyInclude
# ... more includes ...
HEADERS += fancy.h \
# ... many headers ...
SOURCES += main.cpp \
fancy.cpp \
# ... many sources ...
contains(DEFINES, APP_ARCH_x32) {
DESTDIR = ../../product/win32
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x86
MOC_DIR = ./debug_x86
LIBS += -L../addon/Fab/Bin32 -llibfab32D
TARGET = FancyApp32D
} else {
OBJECTS_DIR = ./release_x86
MOC_DIR = ./release_x86
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -L../addon/Fab/Bin32 -llibfab32D
TARGET = FancyApp32
}
}
contains(DEFINES, APP_ARCH_x64) {
DESTDIR = ../../product/win64
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x64
MOC_DIR = ./debug_x64
LIBS += -L../addon/Fab/Bin64 -llibfab64D
TARGET = FancyApp64D
} else {
OBJECTS_DIR = ./release_x64
MOC_DIR = ./release_x64
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -L../addon/Fab/Bin64 -llibfab64D
TARGET = FancyApp64
}
}
DEFINES += LATEST_PROCESSABLE_VERSION=\\\"3.4\\\"
在一次密集的谷歌搜索之后,我现在已经没有办法尝试了。有人能帮忙吗
编辑1: 至少我认为我有这些例子在顶部工作了一次。但我现在甚至无法让它们工作(再次),我完全不知道是什么导致了这里的错误。我什么都不知道了,请帮帮我!--
编辑2: 好吧,天气热得让我很难受。实际问题是
QMAKE\u TARGET\u COMPANY
和QMAKE\u TARGET\u PRODUCT
中的空格。下面的示例现在运行良好
...
QMAKE_TARGET_COMPANY = Test GmbH
QMAKE_TARGET_PRODUCT = Fancy Application
QMAKE_TARGET_DESCRIPTION = Does fancy stuff
QMAKE_TARGET_COPYRIGHT = 2018
DEFINES += COPYRIGHT_STRING="\"$${QMAKE_TARGET_COPYRIGHT}\""
DEFINES += VERSION_STRING="\"$${VERSION}\""
DEFINES += LATEST_DECODABLE_ESF_VERSION="\"3.4\""
...
我想
…使用QMAKE\u TARGET\u COPYRIGHT
中的空格,以获得COPYRIGHT(C)$${QMAKE\u TARGET\u COMPANY}2018的价值-保留所有权利-仅供内部使用
我想
…定义另一个变量APP\u NAME\u和\u VERSION\u STRING
,由$${QMAKE\u TARGET\u PRODUCT}
和$${VERSION}
组成,用空格分隔
我怎样才能做到这一点?我没有找到任何使它工作的方法。请记住,文本必须转义两次:对于
qmake
本身和shell命令。所以正确的逃逸应该是这样的:
win32:TEMPLATE = vcapp
!win32:TEMPLATE = app
QT += core xml network
CONFIG += console
CONFIG += no_keywords
#C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
QMAKE_CXXFLAGS += /wd4290
VERSION = 3.2.0.3
QMAKE_TARGET_COMPANY = APP GMBH
QMAKE_TARGET_PRODUCT = Fancy Application
QMAKE_TARGET_DESCRIPTION = Does fancy stuff
QMAKE_TARGET_COPYRIGHT = COPYRIGHT (C) $${QMAKE_TARGET_COMPANY} 2018 - ALL RIGHTS RESERVED - FOR INTERNAL USE ONLY
DEFINES += DECODER_COPYRIGHT_STRING="\"$${QMAKE_TARGET_COPYRIGHT}\""
DEFINES += DECODER_VERSION_STRING="\"$${QMAKE_TARGET_PRODUCT} $${VERSION}\""
DEFINES += LATEST_PROCESSABLE_VERSION="\"3.4\""
# set application icon
RC_ICONS = Application.ico
INCLUDEPATH += ../FancyInclude
# ... more includes ...
HEADERS += fancy.h \
# ... many headers ...
SOURCES += main.cpp \
fancy.cpp \
# ... many sources ...
contains(DEFINES, APP_ARCH_x32) {
DESTDIR = ../../product/win32
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x86
MOC_DIR = ./debug_x86
LIBS += -L../addon/Fab/Bin32 -llibfab32D
TARGET = FancyApp32D
} else {
OBJECTS_DIR = ./release_x86
MOC_DIR = ./release_x86
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -L../addon/Fab/Bin32 -llibfab32D
TARGET = FancyApp32
}
}
contains(DEFINES, APP_ARCH_x64) {
DESTDIR = ../../product/win64
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x64
MOC_DIR = ./debug_x64
LIBS += -L../addon/Fab/Bin64 -llibfab64D
TARGET = FancyApp64D
} else {
OBJECTS_DIR = ./release_x64
MOC_DIR = ./release_x64
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -L../addon/Fab/Bin64 -llibfab64D
TARGET = FancyApp64
}
}
DEFINES += LATEST_PROCESSABLE_VERSION=\\\"3.4\\\"
及
请注意,字符串中的所有空格都必须转义
您也可以切换到使用
QMAKE_替换
来自动生成适当的C头文件,并避免丑陋的命令行定义
谢谢您的帮助,mate,但我仍然有问题。你对最新可处理版本的第一个建议很好,但我无法让第二个起作用。如果我这样做,我会得到错误moc:指定的输入文件太多:'Decoder''BETA\''3.2.0.3'
。此外,正如您所看到的,转义空间不是一个空间,而是添加到字符串中的'\'(你最近建议使用QMAKE_替代品,这让我很开心!我不知道这种可能性,我找到了一个很好的解释。谢谢你,伙计!