我正在尝试在我的qMake * .pro文件中指定变量,以便在我的实际代码(VS 2015项目)中使用宏。
我确实有类似的工作示例:
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_PROCESSABLE_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
}
}
经过大量的google搜索后,我现在没有更多的选择可以尝试了。有人可以帮忙吗?
编辑1:
至少我以为我在顶部的那些例子可以工作一次。但是,我目前甚至无法(再次)使它们正常工作,而我完全不知道是什么导致了这里的错误。我什么都不知道了,请帮忙! -.-
编辑2:
好吧,接缝的热量使我丧命。实际的问题是QMAKE_TARGET_COMPANY
和QMAKE_TARGET_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_TARGET_COPYRIGHT
中的空格取值为COPYRIGHT (C) $${QMAKE_TARGET_COMPANY} 2018 - ALL RIGHTS RESERVED - FOR INTERNAL USE ONLY
我想...
...定义另一个变量APP_NAME_AND_VERSION_STRING
,该变量由$${QMAKE_TARGET_PRODUCT}
和$${VERSION}
组成,并用空格分隔。
我该如何实现?我没有找到任何使它起作用的东西。
答案 0 :(得分:1)
请记住,文本必须两次转义:qmake
本身和shell命令。因此,正确的转义应如下所示:
DEFINES += LATEST_PROCESSABLE_VERSION=\\\"3.4\\\"
和
DEFINES += APP_NAME_AND_VERSION_STRING="\\\"$${QMAKE_TARGET_PRODUCT}\ $${VERSION}\\\""
请注意,字符串中的所有空格都必须转义。
您还可以切换为使用QMAKE_SUBSTITUTES
自动生成适当的C头文件并避免使用丑陋的命令行DEFINES
。