2017-10-05 12 views
-1

Pour mes projets WINAPI, j'utilise atom IDE avec la programmation c, je pourrais compiler mon code depuis l'invite cmd sans problème jusqu'à ce que j'ai commencé à utiliser les fichiers .rc. mais maintenant que j'utilise des fichiers rc avant de compiler mon programme, j'ai besoin d'exécuter ces commandes sur l'invite cmd.Cmd invite windows compiling

gcc -c jake.c 
gcc -o jake jake.o -mwindows 
windres -o jakerc.o jakerc.rc 
gcc -o jake jake.o jakerc.o -mwindows 

en les tapant tous encore et encore pour voir si mon programme fonctionne correctement chaque fois que c'est vraiment fastidieux. (Aussi s'il vous plaît ne me dites pas d'utiliser IDE comme DEV C++ ou Visual Studio parce que je ne les aime pas autant que j'aime atome.)

alors j'ai trouvé cette solution. J'ai fait un fichier supplémentaire appelé compile.c qui à l'intérieur ressemble à ceci.

#include <stdio.h> 
#include <stdlib.h> 

int main() { 

    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -c jake.c"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -o jake jake.o -mwindows"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul windres -o jakerc.o jakerc.rc"); 
    system("C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -o jake jake.o jakerc.o -mwindows"); 
    return 0; 
} 

Quand je compiler et exécuter ce programme, je reçois cette erreur:

'C:\\Users\\hashtag\\Desktop\\rawsock\\kokul' is not recognized as an internal or external command, 
operable program or batch file. 

Comment puis-je me débarrasser de cette erreur, et comment puis-je compiler automatiquement mes fichiers quand je lance compile.exe?

+3

utiliser un batchfile paramétré –

+0

pouvez-vous le montrer juste pour vous assurer? @SebastianL – turmuka

+1

Je vois deux choix: Soit créer un fichier script '.bat' qui fait tout cela pour vous. Ou apprendre à utiliser 'make',' nmake' ou des outils similaires. –

Répondre

1

comme mentionné dans mon commentaire, je vous recommande d'utiliser un batchfile et pas un programme c compilé pour cela.

Exemple:

@ECHO off 
SET workingDirectory=%~dp0 
SET fileName=%1 
echo using %workingDirectory% as working directory 
gcc -c %fileName%.c 
gcc -o %fileName% %fileName%.o -mwindows 
windres -o %fileName%rc.o %fileName%rc.rc 
gcc -o %fileName% %fileName%.o %fileName%rc.o -mwindows 

vous pouvez exécuter vos commandes desiered avec nameofthebatchfile.bat jake

1

Tant que kokul est un répertoire de la ligne de commande

C:\\Users\\hashtag\\Desktop\\rawsock\\kokul gcc -c jake.c 

n'a pas de sens. Vous pouvez combiner plusieurs commandes. Si vous voulez changer dans le kokul du répertoire et commencer la compilation cela fonctionnera

CD C:\\Users\\hashtag\\Desktop\\rawsock\\kokul & gcc -c jake.c 

Mais écrire de toute façon un fichier de commandes est beaucoup plus facile:

1

Vous pouvez le faire avec deux lignes

windres -o jakerc.o jakerc.rc 
gcc -o jake jake.c jakerc.o -mwindows 

Enregistrez-les dans un fichier "mj.bat", puis lancez l'invite de commande du formulaire en tapant "mj".

Lorsque votre projet se développe au-delà de deux ou thre fichiers, vous devez utiliser makefile GCC and Make Compiling, Linking and Building C/C++ Applications

package Vérifiez aussi atom-shell-commands ou run-command pour Atom. Vous pouvez exécuter cet éditeur de formulaire directement.

0

Si vous travaillez avec des outils de ligne de commande, cette tâche semble juste demander un Makefile. Non seulement make automatisera les actions nécessaires, mais il essaiera de déterminer, à partir des horodatages des fichiers, quelles actions doivent réellement être exécutées. Si vous n'avez pas modifié de fichier source C, par exemple, vous n'avez pas besoin de le recompiler. L'efficacité de make, ou similaire, augmentera énormément à mesure que vos applications deviendront plus volumineuses et qu'elles auront des dépendances plus complexes entre les composants.

Vous pouvez effectuer certaines opérations avec des fichiers de traitement par lots simples, mais, idéalement, le fichier de traitement par lots doit s'arrêter lorsque l'une des étapes rencontre une erreur. Il est inutile de poursuivre un long processus de construction qui est voué à l'échec, et trouver le message d'erreur pertinent dans les pages de sortie non pertinentes peut être une corvée. C'est une autre chose que make fait juste.

Il peut prendre un certain temps pour arriver au dessus de Makefiles, avec leur syntaxe mystérieuse. Cependant, l'effort sera récompensé à plusieurs reprises à plus long terme.