【问题标题】:Adding Preprocessor directive dynamically from commandline build VS2008从命令行构建 VS2008 动态添加预处理器指令
【发布时间】:2010-08-23 21:21:17
【问题描述】:

我正在使用 VS2008,并正在开发 C/C++ 项目。我正在使用 .bat 文件从命令行(VC2k8 命令提示符)构建我的项目。我需要一种在构建时动态包含 preprossor 指令的方法。

我正在使用 devenv 从命令行构建。

>devenv my\project\path\myproject.sln /build release > logs\build.log

其实我想给批处理文件设置一个基于命令行参数的宏定义。我可以保留两个不同的 .vcproj 文件,但这会给保留多个项目/sln 文件带来问题。 我的批处理文件会是这样的......

if (condition)
#define MYPROC_ENABLE_MYMODULE "yes" // To be included in the project.
else
#define MYPROC_ENABLE_MYMODULE "no"

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: visual-studio visual-studio-2008 visual-c++ visual-c++-2008 vcbuild


    【解决方案1】:

    一种选择是设置the CL environment variable,使用类似:

    set CL=/DMYPROC_ENABLE_MYMODULE
    

    C++ 编译器 (cl.exe) 将在运行时将CL 环境变量的内容添加到其命令行。

    我知道如果您使用msbuild 构建,您可以定义宏,但我不确定直接使用devenv 时是否可以这样做。

    【讨论】:

    • devenv/msbuild 能否确定是否需要重建?假设您使用默认项目选项构建,然后设置CL 并再次构建。它会重建整个项目吗?还是您必须明确地清理和构建?
    • @the_mandrill:这是一个很好的问题,可能由对 VCBuild 更有经验的人来回答。我的猜测是应该正确处理重建,但我也不确定。
    • 感谢大家的宝贵意见。我现在知道了,它在我的项目中运行良好。
    【解决方案2】:

    您可以为您的解决方案进行不同的配置,并为不同的配置定义不同的预处理器标志。然后你只需要在命令行选择配置,不需要多个解决方案或项目文件。

    【讨论】:

    • 如果您没有很多项目要保持同步并且您不需要许多不同类型的配置,那么该解决方案会更好。否则詹姆斯的选择会更加灵活。
    • @the_mandrill 是的,你是对的,如果你有一堆不同的标志,你希望能够独立设置,你会遇到一个组合问题。您必须为要使用的每个唯一标志组合提供配置名称。但是对于任何比这更简单的事情,我认为更好的工具支持将使配置成为更好的选择。
    • 它的好处是确保项目能够正确重建。所以我想这两种方法的选择将取决于个人需求。
    • 右键单击 IDE 中的解决方案,然后从菜单中选择配置管理器。您可以为解决方案或任何单个项目创建配置,默认设置为调试和发布。对于每个项目配置,您可以定义不同的预处理器标志。因此,您可以为您的一个项目进行 Release_MyModule 配置并定义 MYPROC_ENABLE_MYMODULE。然后,您将拥有一个 Release_MyModule 解决方案配置,该解决方案配置与 Release 具有所有相同的项目配置,只是它会为一个项目提供 Release_MyModule。
    • 然后从命令行你可以这样做:devenv my\project\path\myproject.sln /build Release_MyModule > logs\build.log
    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多