Plate-forme de détection de CMake
J'ai ajouté quelques fonctionnalités de boost::asio
, qui a précipité certains compilateur "mises en garde":
Veuillez define _WIN32_WINNT ou _WIN32_WINDOWS de façon appropriée.
Que le problème a été traité avec ici. J'aimerais avoir CMake détecter le moment où je fais construire sur Windows et de faire des définitions ou des arguments de ligne de commande.
Trouvé une petite mine d'or sur le wiki de cmake: cmake.org/Wiki/CMake_Useful_Variables..
OriginalL'auteur 2NinerRomeo | 2012-03-16
Vous devez vous connecter pour publier un commentaire.
Voici une solution simple.
si (WIN32) si cela est vrai même si vous êtes à la croix de la compilation sous Windows pour autre chose que Windows. Vous vous retrouverez avec -D_WIN32_WINNT même si vous êtes en train de construire quelque chose d'autre.
Pour Windows 10, comme
Windows Kits\8.1\Include\shared\sdkddkver.h(255): error C2177: constant too big
, vérifiez @squareskittles réponse ci-dessous.OriginalL'auteur KneLL
À l'intérieur de la CMakeLists.txt fichier que vous pouvez faire:
set(CMAKE_EXE_LINK_FLAGS "${CMAKE_EXE_LINK_FLAGS} -linkerflag")
donc j'espère que ce sera le même pour les drapeaux du compilateur. J'ai aussi appris à ajouter des définitions de préprocesseur.OriginalL'auteur karlphillip
Voici une version étendue du Glas de la réponse, vérifie aussi pour Windows 10.
OriginalL'auteur squareskittles
Comme karlphilip souligné, vous pouvez utiliser
if(WIN32)
de la plate-forme de détection.Vous aurez un certain nombre de possibilités pour le passage de préprocesseur pour l'application:
#define
s sont en fait une partie du code et non pas de l'environnement de compilation. L'inconvénient est qu'il nécessite un (automatique) de l'étape de prétraitement par CMakeUtiliser le COMPILE_DEFINITIONS de la propriété. Cela permet un contrôle précis sur la définit fichier par fichier (et même par-config):
set_property(SOURCE ${YOUR_SOURCE_FILES} APPEND PROPERTY
COMPILE_DEFINITIONS YOUR_FLAG1 YOUR_FLAG2)
Moderne CMake versions (2.8.12 et supérieur), vous pouvez également utiliser le plus pratique
target_compile_definitions
commande pour cette.D'habitude, je préfère le dernier, mais c'est surtout une question de goût personnel.
OriginalL'auteur ComicSansMS
Une version améliorée de KneLLs réponse:
KneLLs version n'a pas de travail dans mon cas, parce que
CMAKE_SYSTEM_VERSION
était6.3.9600
qui a abouti à${ver}=0x060306090000
Cette version va échouer pour Windows 10 et les versions ultérieures, si. On doit vérifier si le premier nombre est plus grand que 9, et de le convertir à la bonne valeur hexadécimale.
OriginalL'auteur Twonky
C'est ce que je suis venu avec:
Pour traiter avec les boost::asio "avertissement", soit la définition de préprocesseur ou de l'option de ligne de commande fait le travail.
_WIN32_WINNT
définir deux fois, et vous êtes également à la fixation de la version Windows à XP.Merci. Je suis tellement heureux que d'autres sont venus avec une solution de qualité supérieure depuis que j'ai posté cette question. Puisque vous l'ai porté mon attention sur elle, j'ai changé mes accepté de répondre.
OriginalL'auteur 2NinerRomeo