RC ファイルのプリプロセッサ ディレクティブは非常に限られています。
ディレクティブの説明
#define 特定の値を割り当てて、指定した名前を定義します。
#elif 条件付きコンパイル ブロックのオプション句をマークします。
#else 条件付きコンパイル ブロックの最後のオプション句をマークします。
#endif 条件付きコンパイル ブロックの終了を示します。
#if 指定された式が true の場合、スクリプトを条件付きでコンパイルします。
#ifdef 指定した名前が定義されている場合、スクリプトを条件付きでコンパイルします。
#ifndef 指定された名前が定義されていない場合、条件付きでスクリプトをコンパイルします。
#include ファイルの内容をリソース定義ファイルにコピーします。
#undef 指定された名前の定義を削除します。
そして#define
、単純な形式です: ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa381061(v=vs.85).aspxの後):
#名前の値を定義
解決策があります-この回答によると、ICON/BITMAPSパスを環境変数として準備し、衣装名からそれらを構築できます-しかし、それはあなたのbatchFileまたはmakefileで行う必要があります:
すでに述べた答えから:
In your project properties add ;$(CMDLINE_DEFINES) to the end of your resource preprocessor definitions. (Be sure to pick the right configuration.)
Then when you use MSBuild from the command line type (or add to a batch file)...
C:\Projects\SomeProject> set CMDLINE_DEFINES=SOMETEST=42
C:\Projects\SomeProject> MSBuild SomeProject.vcproj
この回答は C++ ファイルに対するものでした:
あなたの例:
CONCAT("../files/images/",CUSTOMER_ID,"icon.ico")
次のようなマクロを使用する必要があります。
#define TOSTRING(T) #T
#define CONCAT(dir, cid, filetype) dir TOSTRING(cid) filetype
これは、このマクロ展開が"../files/images/" "customer1" "icon.ico"
. また、C++ コンパイラは隣接する文字列リテラルを連結します。
この例:
#include <iostream>
#define TOSTRING(T) #T
#define CONCAT(dir, cid, filetype) dir TOSTRING(cid) filetype
#define CUSTOMER_ID customer1
int main() {
std::cout << ">>>>>" << CONCAT("../files/images/",CUSTOMER_ID,"icon.ico") << "<<<<\n";
}
出力が生成されます:
>>>>>../files/images/customer1icon.ico<<<<
/
前に追加する必要がある可能性がありますicon.ico
...