Visual Studio自定义构建事件始终执行

Tho*_*ews 4 c++ custom-build-step visual-studio-2010 odb

我使用odb编译器作为自定义构建工具.即使输入文件没有更改,构建工具也始终在执行.

命令行:

odb -Ic:\menuplan\src\ingredient -o c:\menuplan\src\ingredient  
 -d mysql --hxx-prologue "#include \"odb/traits.hxx\"" --generate-query  
--generate-schema --schema-format separate 
c:\menuplan\src\ingredient\ing_odb_category.hpp`  
Run Code Online (Sandbox Code Playgroud)

输入文件是:
ing_odb_category.hpp.

产出:

ing_odb_category-odb.hxx;ing_odb_category-odb.ixx;ing_odb_category-odb.cxx;ing_odb_category-schema.cxx   
Run Code Online (Sandbox Code Playgroud)

其他依赖项:
ing_odb_category.hpp

说明:
odb ing_odb_category.hpp

Visual Studio 2010的输出:

2>------ Build started: Project: vs_2010, Configuration: Debug Win32 ------
2>  odb ing_odb_category.hpp
Run Code Online (Sandbox Code Playgroud)

odb工具采用了ing_odb_category.hpp作为输入和产生ing_odb_category-odb.hxx,ing_odb_category-odb.ixx,ing_odb_category-odb.cxx,ing_odb_category-schema.cxx文件.

我可以连续多次构建解决方案,并且自定义构建事件将始终运行,即使ing_odb_category.hpp文件永远不会更改.

如果头文件发生更改,如何使Visual Studio仅执行自定义生成?

从vcxproj文件:

<CustomBuild Include="..\ing_odb_category.hpp">
  <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">odb -Ic:\menuplan\src\ingredient -o c:\menuplan\src\ingredient -d mysql --hxx-prologue "#include \"odb/traits.hxx\"" --generate-query --generate-schema --schema-format separate  c:\menuplan\src\ingredient\ing_odb_category.hpp</Command>
  <Command Condition="'$(Configuration)|$(Platform)'=='Debug_Static_Unicode|Win32'">odb -Ic:\menuplan\src\ingredient -o c:\menuplan\src\ingredient -d mysql --hxx-prologue "#include \"odb/traits.hxx\"" --generate-query --generate-schema --schema-format separate  c:\menuplan\src\ingredient\ing_odb_category.hpp</Command>
  <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">odb ing_odb_category.hpp</Message>
  <Message Condition="'$(Configuration)|$(Platform)'=='Debug_Static_Unicode|Win32'">odb ing_odb_category.hpp</Message>
  <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ing_odb_category-odb.hxx;ing_odb_category-odb.ixx;ing_odb_category-odb.cxx;ing_odb_category-schema.cxx</Outputs>
  <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug_Static_Unicode|Win32'">ing_odb_category-odb.hxx;ing_odb_category-odb.ixx;ing_odb_category-odb.cxx;ing_odb_category-schema.cxx</Outputs>
  <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ing_odb_category.hpp</AdditionalInputs>
</CustomBuild>
Run Code Online (Sandbox Code Playgroud)

环境:

  • Visual Studio 2010
  • Windows 7 - 64位

Tho*_*ews 8

Visual Studio始终构建文件,因为它说它们不存在.

使用Visual Studio项目日志文章,尤其是运行DebugView,显示Visual Studio正在为依赖项使用不同的路径.我没有指定输出文件和依赖项的路径,所以它试图在默认项目目录中找到它们.

此外,根据" 指定自定义构建工具"一文,Visual Studio只需要一个输出文件.我提供了所有输出文件名.

摘要

在"自定义构建工具"窗口中:

  1. 应该只有一个输出文件.
  2. Additional Dependencies 插槽中列出了其他输出文件.
  3. 所有输出文件都应该以其位置的路径为前缀,相对或绝对.

有用的构建过程调试辅助工具可以在Visual Studio Project Logging本文中找到,尤其是DebugView应用程序.