VS 2015“;构建依赖项->;“构建定制”;总是触发预构建和后构建 我有一个VS 2015 C++项目,既有预构建又有后生成步骤。p>

VS 2015“;构建依赖项->;“构建定制”;总是触发预构建和后构建 我有一个VS 2015 C++项目,既有预构建又有后生成步骤。p>,c++,visual-studio-2015,post-build-event,nmake,custom-build-step,C++,Visual Studio 2015,Post Build Event,Nmake,Custom Build Step,此外,我还通过“构建依赖项->构建自定义”将自定义目标添加到项目中。自定义目标运行一个Perl脚本,该脚本使用“英特尔编译器”运行nmake生成文件。自定义目标始终运行。具体地说,在nmake检查更改并防止在输入文件未更改时生成时,Perl脚本始终运行。 调用自定义目标会导致预构建和后构建运行,即使自定义目标没有生成新的输出(它运行,但只执行检查) 如果我的自定义目标没有生成任何新的输出,我希望阻止预构建和后构建运行。到目前为止,我还没有找到一种方法 另一个选项是,如果源未更改,则阻止自定义目标

此外,我还通过“构建依赖项->构建自定义”将自定义目标添加到项目中。自定义目标运行一个Perl脚本,该脚本使用“英特尔编译器”运行nmake生成文件。自定义目标始终运行。具体地说,在nmake检查更改并防止在输入文件未更改时生成时,Perl脚本始终运行。 调用自定义目标会导致预构建和后构建运行,即使自定义目标没有生成新的输出(它运行,但只执行检查)

如果我的自定义目标没有生成任何新的输出,我希望阻止预构建和后构建运行。到目前为止,我还没有找到一种方法

另一个选项是,如果源未更改,则阻止自定义目标运行。不幸的是,“英特尔编译器”生成的文件被标记为“从生成中排除”,因此不会触发自定义目标。我试图为自定义目标运行的任务定义输入和输出,但没有成功


任何帮助都将不胜感激

确保您的自定义目标具有Inputs and Outputs属性,该属性正确描述了哪些文件将用作输入,哪些文件是结果输出。MsBuild将使用这些文件上的时间戳来决定您是否实际更改了任何内容。这些文件上的时间戳必须早于将作为目标输出生成的文件,这是MsBuild决定的

例如:

<Target Name="Custom"   
    Inputs="@(CSFile)"   
    Outputs="hello.exe">  

    <Csc  
        Sources="@(CSFile)"   
        OutputAssembly="hello.exe"/>  
</Target>  
<PropertyGroup>
    <BuildDependsOn>
        Convert;
        $(BuildDependsOn);
    </BuildDependsOn>
</PropertyGroup>  
见:


这似乎不适用于外部工具。我尝试了一个简单的目标:目标运行一个Perl脚本将a.txt复制到b.txt。但是,当我更改a.txt的内容时,不会调用自定义目标。很抱歉重复提交。尝试对新行使用ENTER键:(
<PropertyGroup>
    <BuildDependsOn>
        Convert;
        $(BuildDependsOn);
    </BuildDependsOn>
</PropertyGroup>