Can I pass a preprocessor definition to the resource compiler through the command line?
Solution 1
Yes, this can be done.
Try using environment variables to pass values into your build process.
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
A batch file may look like:
@echo off
SET CMDLINE_DEFINES=%1
MSBUILD SomeProject.vcproj
Using this batch file, whatever you pass on the commandline will be passed on to the build process as your preprocessor macro(s).
Solution 2
The difficulty I have been running into is that using Visual Studio 2010, in order to pass a preprocessor definition to the resource compiler you must define it in the project settings (Config Properties -> Resources -> General).
You got the hard part. Just enter the define as TESTAPPLE=15
and it will effectively #define TESTAPPLE 15
for the entire project.
Solution 3
See the answer to this, with the additional step of setting up ResourceCompile options, i.e. edit your project file in a text editor to include elements like this:
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ResourceCompile>
</ItemDefinitionGroup>
Maixy
Updated on June 16, 2022Comments
-
Maixy almost 2 years
I'm currently trying to switch between a few different default Icons in a Visual C++ .rc file using
#ifdef
tags.The builds switching the #define value are being created through command line using MSBuild.
The difficulty I have been running into is that using Visual Studio 2010, in order to pass a preprocessor definition to the resource compiler you must define it in the project settings (Config Properties -> Resources -> General).
This makes it difficult to use an
#ifdef
tag because using this method it will always be defined in the resource compiler.I would love to define it to a value, so that I might use a preprocessor
#if SOMEVALUE == 4
might work, but Cannot seem to find a way to pass a Preprocessor definition + value to MSBuild via the command line.Does anyone know a way to pass a preprocessor definition directly through to the resource compiler or a way to define a value for a preprocessor definition via commandline for msbuild?
-
Maixy over 12 yearsUnfortunately #define values that are passed to project compiler don't get passed down to the Resource compiler. I.e., /D "TESTAPPLE=15" in when compiling the project sets TESTAPPLE to a value of 15. In the Resource Compiler, however, TESTAPPLE is just defined, but doesn't have a value of 15.
-
Mooing Duck over 12 yearshuh, guess I haven't played with the resource compiler enough. cmake.org/pipermail/cmake/2011-January/042093.html implies that it works
/d "CMAKE_INTDIR=\"Release\""
, but not an authoritive source.