Visual Studio 自定义生成事件始终执行
Visual Studio custom build event always executing
我正在使用 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`
输入文件是:
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
描述:
odb ing_odb_category.hpp
2010 年 Visual Studio 的输出:
2>------ Build started: Project: vs_2010, Configuration: Debug Win32 ------
2> odb ing_odb_category.hpp
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>
环境:
- Visual Studio 2010
- Windows 7 - 64 位
Visual Studio 一直在构建文件,因为它说它们不存在。
使用 Visual Studio project logging article, especially running the DebugView 显示 Visual Studio 正在为依赖项使用不同的路径。我没有指定输出文件和依赖项的路径,因此它试图在默认项目目录中找到它们。
此外,根据 Specifying Custom Build Tools article,Visual Studio 只需要一个输出文件。我提供了所有输出文件名。
总结
在自定义构建工具中 window:
- 应该只有一个输出文件。
- 其他输出文件列在
Additional Dependencies
插槽。
- 所有输出文件都应以其所在位置的路径为前缀,
相对或绝对。
可以在 Visual Studio Project Logging
文章中找到有用的构建过程调试辅助工具,尤其是 DebugView
应用程序。
我正在使用 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`
输入文件是:
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
描述:
odb ing_odb_category.hpp
2010 年 Visual Studio 的输出:
2>------ Build started: Project: vs_2010, Configuration: Debug Win32 ------
2> odb ing_odb_category.hpp
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>
环境:
- Visual Studio 2010
- Windows 7 - 64 位
Visual Studio 一直在构建文件,因为它说它们不存在。
使用 Visual Studio project logging article, especially running the DebugView 显示 Visual Studio 正在为依赖项使用不同的路径。我没有指定输出文件和依赖项的路径,因此它试图在默认项目目录中找到它们。
此外,根据 Specifying Custom Build Tools article,Visual Studio 只需要一个输出文件。我提供了所有输出文件名。
总结
在自定义构建工具中 window:
- 应该只有一个输出文件。
- 其他输出文件列在
Additional Dependencies
插槽。 - 所有输出文件都应以其所在位置的路径为前缀, 相对或绝对。
可以在 Visual Studio Project Logging
文章中找到有用的构建过程调试辅助工具,尤其是 DebugView
应用程序。