Как условно скомпилировать ресурсы VC6
-
10-07-2019 - |
Вопрос
В зависимости от параметра компиляции (значения COMPILE_A
или COMPILE_B
), заданного в форме переменной envorinment, я хочу скомпилировать свое приложение с различными настройками, такими как имя приложения и заставка. р>
Я получил это далеко:
<Ол> В " Проект / Настройки / C / C ++ / Определения препроцессора " Я добавил $(COMPILESWITCH)
(приводит к параметру командной строки /D "$(COMPILESWITCH)"
).
В stdafx.h я могу использовать следующий код, что означает, что я правильно определил определение препроцессора через параметр командной строки:
#if defined COMPILE_A
# define IDB_SPLASH IDB_SPLASH_A
# elif defined COMPILE_B
# define IDB_SPLASH IDB_SPLASH_B
# else
# error Unknown or undefined target compile switch; cannot compile!
# endif
Но я заметил & условие " свойство в " ResourceView / [щелчок правой кнопкой мыши] / Properties " ... Текст справки гласит:
СостояниеОпределяет включение ресурс. Например, если условие _DEBUG, этот ресурс будет включен только в отладке строит.
Это похоже на элегантный способ сделать это, верно?
Указание _DEBUG
как условие работает. Так как /D _DEBUG
указано через <=>, мой <=> также должен работать, верно?
По какой-то причине это не так; почему?
Или есть даже другой, лучший способ добиться того, чего я хочу?
Решение
Думаю, я только что решил свою проблему ...
Компилятор ресурсов использует свой собственный препроцессор.
Поэтому то же самое определение препроцессора должно быть добавлено в & Quot; Проект / Настройки / Ресурсы / Определения препроцессора & Quot;.
Изменить: строковые ресурсы
Вышеуказанное не работает для строковых ресурсов, так как они не имеют " условие " свойство ...
Я решил использовать res\<projectname>.rc2
файл пользовательских ресурсов, который не будет затронут редактором ресурсов.
Контент выглядит так
#if defined(COMPILE_A) STRINGTABLE DISCARDABLE BEGIN IDR_MAINFRAME "AppTitle A" END #else # if defined(COMPILE_B) STRINGTABLE DISCARDABLE BEGIN IDR_MAINFRAME "AppTitle B" END # else # error Compile switch not defined or unknown; cannot compile! # endif #endif