Могу ли я передать определение препроцессора в компилятор ресурсов через командную строку? - PullRequest
4 голосов
/ 22 августа 2011

В настоящее время я пытаюсь переключаться между несколькими различными значками по умолчанию в файле Visual C ++ .rc, используя теги #ifdef.

Сборки, переключающие значение #define, создаются через командную строку с использованием MSBuild.

Трудность, с которой я столкнулся, заключается в том, что в Visual Studio 2010 для передачи определения препроцессора компилятору ресурсов его необходимо определить в настройках проекта («Свойства конфигурации» -> «Ресурсы» -> «Общие»).

Это затрудняет использование тега #ifdef, поскольку при использовании этого метода он всегда будет определяться в компиляторе ресурсов.

Я бы хотел определить его как значение, чтобы я мог использовать препроцессор #if SOMEVALUE == 4, возможно, сработает, но, похоже, не может найти способ передачи значения определения + препроцессора в MSBuild через командную строку.

Кто-нибудь знает способ передачи определения препроцессора напрямую через компилятор ресурсов или способ определения значения для определения препроцессора через командную строку для msbuild?

Ответы [ 3 ]

5 голосов
/ 22 августа 2011

Да, это можно сделать.

Попробуйте использовать переменные среды для передачи значений в процесс сборки.

В свойствах своего проекта добавьте $ (CMDLINE_DEFINES) в конец вашего ресурса.определения препроцессора.(Обязательно выберите правильную конфигурацию.)

Тогда, когда вы используете MSBuild из типа командной строки (или добавляете в пакетный файл) ...

C:\Projects\SomeProject> set CMDLINE_DEFINES=SOMETEST=42
C:\Projects\SomeProject> MSBuild SomeProject.vcproj

Пакетный файл можетвыглядят так:

@echo off
SET CMDLINE_DEFINES=%1
MSBUILD SomeProject.vcproj

Используя этот пакетный файл, все, что вы передадите в командную строку, будет передано процессу сборки как ваш макрос (ы) препроцессора.

1 голос
/ 15 февраля 2013

См. Ответ на this , с дополнительным этапом настройки параметров ResourceCompile, т. Е. Измените файл проекта в текстовом редакторе, добавив в него такие элементы:

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
    <ResourceCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
</ItemDefinitionGroup>
1 голос
/ 22 августа 2011

Сложность, с которой я столкнулся, заключается в том, что при использовании Visual Studio 2010 для передачи определения препроцессора в компилятор ресурсов его необходимо определить в настройках проекта (Свойства конфигурации -> Ресурсы -> Общие).

Вы получили сложную часть.Просто введите определение как TESTAPPLE=15, и оно будет эффективно #define TESTAPPLE 15 для всего проекта.

...