代码之家  ›  专栏  ›  技术社区  ›  Kirschstein

Visual Studio中的多个预生成事件?

  •  23
  • Kirschstein  · 技术社区  · 16 年前

    我已经关注了斯科特·汉斯曼的一篇博客文章 managing configuration with PreBuild Events

    现在我想将配置拆分成几个不同的文件,因此需要在构建之前再次执行该命令。问题是预构建事件文本all作为一个控制台命令执行。如何将其拆分为多个命令?

    3 回复  |  直到 16 年前
        1
  •  43
  •   Kirschstein    16 年前

    问题是Scott的例子不包括 call 命令位于行的开头。只要您不想执行 .bat

    这:

    call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config"
    call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config"
    

    对我来说很好。

        2
  •  5
  •   Nick    8 年前

    && ^ ,例如,编辑my.vcxproj xml文件,如下所示:

        <PreBuildEvent>
          <Command>echo "hello 1" &amp;&amp; ^
    echo "hello 2" &amp;&amp; ^
    echo "hello 3"</Command>
          <Message>Performaing pre-build actions ...</Message>
        </PreBuildEvent>
    

    注意,在.xml文件中,不能使用 && 直接,所以 "及;amp&amp;' 必须改用。还要注意 ^ 字符,这是cmdshell的行延续字符(类似于BASH的 \

    每个新命令必须从行首开始。使用这种方法,可以根据需要链接任意多个命令,但如果任何命令失败,链中的其余命令将无法执行。

    下面是我的实际用例,我正在使用Python脚本执行一些环境检查,然后将预编译头的调试文件复制到另一个子项目的目录:

        <PreBuildEvent>
            <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp; ^
    copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command>
            <Message>Performaing pre-build actions ...</Message>
        </PreBuildEvent>
    

    这个 > nul 使用copy命令可以防止任何输出显示在构建窗口中,这样当它显示 0 file(s) copied.

    Sharing precompiled headers between projects in Visual Studio

        3
  •  -1
  •   MBillock    16 年前

    您应该能够将命令放在单独的行上,然后每个命令将按顺序执行。或者,做同样事情的“骗子”方法如下:

    • 创建运行新功能所需部分的第二个批处理文件,然后创建运行两个组件批处理文件的父批处理,并在预生成事件中运行该新批处理。例如:batch1.bat修改文件1,batch2.bat修改文件2,然后batch3.bat同时运行batch1.bat和batch2.bat
    推荐文章