J'utilise CMake pour générer des projets Visual Studio. Tout fonctionne bien sauf une chose.
Le projet de démarrage dans la solution est toujours ALL_BUILD
. Comment changer le projet de démarrage en projet réel que je veux via CMake?
J'utilise CMake pour générer des projets Visual Studio. Tout fonctionne bien sauf une chose.
Le projet de démarrage dans la solution est toujours ALL_BUILD
. Comment changer le projet de démarrage en projet réel que je veux via CMake?
Depuis Visual 2005, la configuration est stockée dans un fichier de nom projectname.vc(x)proj.l'utilisateur, qui est un format xml.
Je ne connais pas un moyen de modifier le projet de démarrage, mais vous pouvez certainement mis ALL_BUILD pour exécuter l'souhaité exécutable au lieu d'afficher le stupide popup :
create_default_target_launcher(
your_desired_target_name
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/desired_path/"
# or ${CMAKE_CURRENT_BINARY_DIR}, depending on your setup
)
Ce module est disponible sur rpavlik de github. Il vous suffit d'ajouter ceci dans votre premier CMakeLists.txt :
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/external/rpavlik-cmake-modules-1c73e35") # or whichever path you put the module in.
include(CreateLaunchers)
Exemples disponibles ici.
Si vous ne pouvez pas permettre un perl dépendance comme moi, j'ai juste écrit un petit utilitaire en ligne de commande pour windows appelé slnStartupProject de résoudre ce problème. Il définit le Projet de Démarrage automatiquement comme ceci:
slnStartupProject slnFilename projectName
Personnellement, je l'utilise pour mettre le projet après la génération de la solution avec cmake qui définit toujours un mannequin ALL_BUILD projet comme le premier projet de la solution.
La source est sur github:
https://github.com/michaKFromParis/slnStartupProject
Les fourches et les commentaires sont les bienvenus.
Espérons que cette aide!
Il est vrai que le choix exprès de l'utilisateur lors de la frappe "Définir comme projet de démarrage" dans l'IDE est stocké dans un fichier binaire. Mais j'ai trouvé quelque part d'autre que Visual Studio prend le premier Projet de la solution implicite Projet de Démarrage lors de la première ouverture d'une solution, CMake n'ont une influence sur ce processus.
Notre problème maintenant: ALL_BUILD est toujours le premier projet. Pour changer cela, je suis en cours d'exécution d'un court script perl après CMake qui coupe le projet souhaité définition du fichier et les colle dans le front. Chemin d'accès au fichier de solution dans le premier paramètre, le nom du projet dans la seconde:
use strict;
use File::Spec;
# variables
my $slnPath = File::Spec->rel2abs($ARGV[0]);
my $projectName = $ARGV[1];
my $contents;
my $header;
my $project;
my $GUID = "[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}";
my $fh;
# read file content (error if not found)
print "Setting \"$projectName\" as Startup Project in \"$slnPath\"...\n";
die "Error: path \"$slnPath\" not found!\n" if not -f $slnPath;
open($fh, "<", $slnPath) or die "Error: cannot read $slnPath: $!";
$contents = do { local $/; <$fh> };
close($fh) or warn "close failed: $!";
# extract part before Projects definition section (the first mention of "Project([GUID])")
$header = $1 if $contents =~ s{(.*?(?=Project\("\{${GUID}\}"\)))}{}si;
# extract definition of the project specified (error if not found)
$project = $1 if $contents =~ s{(Project\("\{${GUID}\}"\) = \"${projectName}\".*?EndProject\s)}{}si;
die "Error: Project not found!\n" if not defined $project or not length $project;
# write header, project definition and remaining content back into the file
`attrib -R "$slnPath"`;
open($fh, ">", $slnPath) or die "Error: cannot write to $slnPath: $!";
print $fh $header, $project, $contents;
close($fh) or warn "close failed: $!";
print "Successfully done.\n";
Une fois que la solution a été ouvert, l'implicite de démarrage du projet est enregistré dans le fichier binaire et donc devient explicite, de sorte que cette même survit à un CMake rediffusion (par exemple, déclenchée par ZÉRO, qui ne permet pas de post-exécution). De la même manière, anm explicite le choix de l'utilisateur est également préservé.
(Écrit et testé sur Win7 machine avec ActiveState Perl)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.