J'ai donc une DLL en cours de construction avec cmake nécessitant un fichier manifeste spécifique à intégrer. Dans les paramètres Visual Studio, je peux simplement ajouter le nom de fichier manifeste sous Manifest Tool / Entrée et Ouput / Fichiers manifestes supplémentaires, et cela fonctionne correctement. Il semble que c'était quelque chose qui devrait être faisable avec Clake, mais j'ai été incapable de le comprendre. P>
Des idées sur la façon dont je peux y accomplir avec cmake? p>
5 Réponses :
Il est impossible de générer le champ visuel génère un manifeste de son propre (yourapp.exe.manifest.intermediate) et les mélanges il avec le vôtre.
Nous devons donc générer ce manifeste une fois, désactivez la génération, et utiliser le produit manifeste après p> Génération du manifeste:. Strong> p> Cette étape est facultative si vous savez comment écrire un manifeste complet par vous-même. Si vous êtes comme le reste du monde: p> La désactivation de la génération: strong> p> Fichiers Manifest supplémentaires code> dans CMake (j'ai vérifié le code source). Nous devons donc être sneakier.
Manifest supplémentaires code>) li>
add_custom_command(
TARGET YourApp
POST_BUILD
COMMAND "mt.exe" -manifest \"$(TargetDir)\\yourapp.final.manifest\" -outputresource:"$(TargetDir)$(TargetFileName)"\;\#1
COMMENT "Adding manifest..."
)
Je Just em> a traversé cet exercice moi-même, c'est ce qui m'a amené à cette page. La réponse de Calvin1602 énonce à peu près la solution, mais j'ai dû finagler la syntaxe un peu pour que cela fonctionne pour moi. Voici les commandes exactes qui ont finalement fonctionné: mt -inputresource:odrmanager.dll;#2 -out:odrmanager.manifest
Je viens de découvrir que vous pouvez fusionner plusieurs fichiers manifestes (ou manifestes intégrés à l'intérieur des exécutables) dans un fichier manifeste existant (ou exécutable) avec mt.exe. De cette façon, vous n'avez pas à désactiver la génération automatique des manifestes de Studio Visual. Vous pouvez simplement ajouter de nouvelles données manifestes avec mt.exe comme étape de postbuild. Exemple:
programme.exe a manifeste intégré: p> dpiaware.manifest contient: p> exécution Commande: P> <?xml version="1.0"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings" xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</ms_windowsSettings:dpiAware>
</windowsSettings>
</application>
</assembly>
C'était très utile. Voici ce que j'ai fini par faire pour une DLL nécessitant un manifeste MSVCR90, votre kilométrage peut varier:
add_custom_command( TARGET foo POST_BUILD COMMAND mt.exe -manifest \"${MYDEPDIR}/msvcr90/Microsoft.VC90.CRT.manifest\" "-inputresource:\"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/foo.dll\";#2" -outputresource:\"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/foo.dll\";#2 COMMENT "Appending manifest for MSVCRT90 dependency." )
CMAKE-3.4 a maintenant appris à gérer * Les fichiers de Manifest sont répertoriés comme fichiers source. P>
https://cmake.org/cmake/help/ v3.4 / version / 3.4.html # Autre P>