我将 CMake v3.13.4 与Visual Studio 2017 Win64生成器一起使用,我需要修改 Visual Studio Librarian(对于 CMake 对象库)的命令行选项。
为了实现这一点,CMake 提供了可以通过and命令STATIC_LIBRARY_OPTIONS设置的目标属性。set_propertyset_target_properties
文档指出STATIC_LIBRARY_OPTIONS支持生成器表达式:
\n\n\n的内容
\nSTATIC_LIBRARY_OPTIONS可以使用 \xe2\x80\x9c 生成器表达式\xe2\x80\x9d 和\n 语法$<...>。有关可用表达式,请参阅cmake-generator-expressions(7) \n 手册。有关定义构建系统属性的更多信息,请参阅cmake-buildsystem(7) \n 手册。
但是:无论我尝试什么,这些值都没有正确转义\xc2\xb4,例如
\n\nset_property(TARGET object_library PROPERTY STATIC_LIBRARY_OPTIONS $<$<CONFIG:Release>:/WX /NOLOGO /LTCG /ERRORREPORT:NONE>)\nRun Code Online (Sandbox Code Playgroud)\n\n在 Visual Studio 中会导致以下结果:
\n\nAll Options: `/OUT:"..." /LTCG /MACHINE:X64 /NOLOGO \nAdditional Options: %(AdditionalOptions) /machine:x64 ""$"<1:/WX" "/ERRORREPORT:NONE>"\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试了以下方法,但似乎都失败了。
\n\nset_property(TARGET object_library PROPERTY\n STATIC_LIBRARY_OPTIONS …Run Code Online (Sandbox Code Playgroud) 我们看到我们的自动化构建系统间歇性中断。该错误与 MSBuild 子节点有关,并且似乎没有任何日志记录或错误信息。该错误可能在任何节点上以及构建中的不同点上随机发生。而且,我无法通过在命令行上运行构建来重现该问题。
0>MSBUILD : error MSB4166: Child node "8" exited prematurely. Shutting down.
Diagnostic information may be found in files in "C:\Users\<user>\AppData\Local\Temp\"
and will be named MSBuild_*.failure.txt. This location can be changed by setting
the MSBUILDDEBUGPATH environment variable to a different directory.
Run Code Online (Sandbox Code Playgroud)
预期的日志文件 MSBuild_*.failure.txt 不存在,并且控制台输出中没有任何信息表明导致失败的原因。我们使用“Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework”和 Jenkins 2.151.3
这是我第一次尝试制作可部署的程序。在创建了一个运行良好的小型 WPF XAML 应用程序(即我可以在 bin 文件夹中运行可执行文件)之后,我试图将它包装在一个安装程序中。
在遵循 WiX 和“Microsoft Visual Studio 安装程序项目”的多个在线指导后。两者都制作安装程序包,但是当我选择“主要输出”时,它们仅针对 WPF XAML 输出中的 dll 文件。这似乎源于 WPF 项目的构建。
如何调整构建过程的主要输出,使其包含在安装程序中?
指定 dll 作为输出文件的构建输出屏幕截图:
要添加更多详细信息:
这可能是一个wpf(.net core)应用程序而不是一个wpf(.net framework)。查看 Elton 屏幕截图中的输出窗口,我们可以发现输出是 xx.dll 而不是 xx.exe。
如果我们在这个方案中创建了一个Installer项目,在Installer项目上右键=>Add=>Project Output=>Primary output,在installer项目中包含WPF的输出,只有xx.dll被认为是wpf的输出,而不是xx 。可执行程序。
所以在VS中建好Installer工程后,双击setup.exe(installer工程的输出),wpf.exe没有安装好。