Can I pass a preprocessor definition to the resource compiler through the command line?

旧街凉风 提交于 2019-12-19 08:54:17

问题


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?


回答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).




回答2:


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>



回答3:


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.



来源:https://stackoverflow.com/questions/7149572/can-i-pass-a-preprocessor-definition-to-the-resource-compiler-through-the-comman

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!