2013-08-24 4 views
3

J'essaie d'entrer en C++ mais c'est ennuyeux d'avoir à exécuter des choses à travers la ligne de commande avec des commandes wordy donc je voulais faire un script bash pour simplifier le processus et exécuter ces commandesbash scripts pour compiler et exécuter C++

#!/bin/bash 
if [ "$1" == "start" ]; then 
    cd CCPP 
    cd HelloWorld 
    g++ -Wall -W -Werror main.cpp -o HelloWorldCPP 
    ./HelloWorldCPP 

Mais je n'ai jamais travaillé avec bash avant et je l'ai piraté ensemble à partir de quelqu'un d'autre code. Ça ne marche pas, mais je ne sais pas pourquoi, car je n'en sais pas assez.

+7

Avez-vous envisagé d'utiliser un makefile? – keyser

+2

Utilisez un IDE, il fait ce genre de choses automatiquement –

+1

Aussi, le script est correct. Quelle erreur obtenez vous? –

Répondre

6

Il vous manque fi à la fin, mais vous pouvez aussi écrire un Makefile GNU comme ceci:

CXX=g++ 
CXXFLAGS=-Wall 
OBJS=main.o 
EXECUTABLE=main 

all: $(EXECUTABLE) 

$(EXECUTABLE): $(OBJS) 
     $(CXX) $(CXXFLAGS) $(OBJS) -o [email protected] 


clean: 
     rm -f $(EXECUTABLE) 
     rm -f $(OBJS) 

main.o: main.cpp 

Notez que ceci est un exemple flexible, et vous pouvez simplifier encore plus loin la ligne. Ici vous pouvez trouver un très bon tutoriel pour lire sur:

http://mrbook.org/tutorials/make/

Cependant, je suggère fortement d'apprendre CMake plutôt que d'écrire Makefiles sont manuellement douloureux.

Un fichier CMakeLists.txt pourrait être quelque chose comme ceci:

add_executable(main main.cpp) 

alors simplement:

mkdir -p build && cd build && cmake ../ && make VERBOSE=1 

et vous sera fait d'une manière multi-plateforme comme GNU Makefile ne fonctionne que sur Unices . Vous devrez ajuster cela pour Windows et ainsi de suite pour le faire fonctionner. cmake est librement disponible à peu près partout, et il a un support approprié pour les constructions natives, compilation croisée.

Ce forum a aussi un tag cmake avec plusieurs personnes autour pour vous aider.

4

J'utilise l'approche « modifier et décompiler » de mrkite comme décrit dans http://echochamber.me/viewtopic.php?f=11&t=12301

Il n'a besoin que d'une incantation magique au sommet de déclarer qu'il est un fichier bash, puis gcc est appelé avec tout et tous les drapeaux que vous voulez et mis à lire à partir du fichier en cours. Un seul mot magique à la fin fait cesser le balayage; et après cela, vous pouvez immédiatement exécuter le code compilé, ou faire autre chose.

#!/bin/sh 
/usr/bin/gcc -xc -o howareyou - <<EVILEOF 
#include <stdio.h> 
int main() 
{ 
    printf("this is so wrong\n"); 
} 
EVILEOF 
./howareyou 
1

@Jongware merci! J'ai d'abord vu que bitcoin.c l'utilisait, mais la version que vous suggérez utilise doc-ici dans bash! génial!

Je l'ai amélioré un peu. Maintenant, vous pouvez compiler les deux

sh program.cpp 

et

g++ program.cpp -o program && ./program 

 

#if 0 
#set -e 
#process substitution 
#ls . | cat EQUALS cat <(ls .) 
#But this does not always work, so we have to use regular one 
(cat <<COLLECTDATAMAGICKEYWORD 
#line 9 
#endif 
#include <iostream> 
#define COLLECTDATAMAGICKEYWORD 
using namespace std; 
int main(int argc, char const *argv[]) 
{ 
    cout<<(char*)(void)"Hello World"; //Intentionally throws warning so you can see #line 9 works! 
    return 0; 
} 
COLLECTDATAMAGICKEYWORD 
#if 0 
) |\ 
sed '2d' |\ 
sed '1a \ "'"$(echo "${0}" | sed 's#\\#\\\\\\\\#g')"'"' |\ 
sed '1N;s#\n##' |\ 
g++ -xc++ -o program3 - 
./program3 
#endif 
Questions connexes