如何在我的Cmake应用程序中嵌入清单(不使用VS)?

时间:2018-07-13 00:59:59

标签: c++ manifest

因此,我发现了许多有关如何使用Visual Studio将清单添加到C ++可执行文件的说明,无论是否使用CMake。但是,似乎Internet上完全没有关于如何使用任何其他IDE来实现此目标的解释,尤其是当您使用CMake时。

由于我不熟悉清单,因此我几乎不知道自己在做什么错。到目前为止,这是清单中的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="My_Executable"
     type="win32"/> 
  <description>This is my executable.</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="true"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

(我要要求用户在启动应用程序时接受管理员权限。)

此文件称为“ My_Executable.final.manifest”,位于我的项目目录(“ CLionProjects / My_Executable /”)内。我使用Microsoft提供的this example创建了它,所以我假设语法很好。

根据this link,当将清单文件添加到可执行文件源时,CMake足够聪明,可以嵌入清单文件,因此我尝试了以下操作:

add_executable(My_Executable main.cpp My_Executable.final.manifest)

什么也不做(也没有错误消息),并按照建议的here添加此自定义命令:

add_custom_command(
        TARGET My_Executable
        POST_BUILD
        COMMAND "mt.exe" -manifest \"${CMAKE_SOURCE_DIR}\\My_Executable.final.manifest\" -outputresource:"${CMAKE_BINARY_DIR}$(TargetFileName)"\;\#1
        COMMENT "Adding manifest..."
)

之所以产生错误The system cannot find the file specified.是因为mt.exe与Visual Studio有关(例如VS)。

因此,我仍然不知道如何使用CLion将清单文件嵌入到我的应用程序中。非常感谢任何线索,因为我已经多次遇到这个问题,但从未能够解决它。

TL; DR:如何在使用CLion启动应用程序时将清单嵌入到CMake应用程序中,以提示用户输入管理员权限?

0 个答案:

没有答案