Visual studio 2015 qMake:如何在C++;

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:

我试图在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\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_替代品
,这让我很开心!我不知道这种可能性,我找到了一个很好的解释。谢谢你,伙计!