2013-08-24 2 views
3

Я пытаюсь попасть в C++, но его раздражает необходимость запускать вещи через командную строку с помощью многословных команд, поэтому я хотел сделать скрипт bash, чтобы упростить процесс и запустить эти команды.скрипты bash для компиляции и запуска C++

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

Но я никогда не работал с bash раньше и не взломал его из кода кого-то elses. Это не работает, но я понятия не имею, почему, поскольку я не знаю достаточно.

+7

Рассматривали ли вы с помощью Makefile? – keyser

+2

Используйте IDE, он делает такие вещи автоматически –

+1

Кроме того, скрипт верен. Какую ошибку вы получаете? –

ответ

6

Вы не хватает fi в конце, но вы также можете написать GNU Makefile так:

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 

Заметим, что это гибкий пример, и вы могли бы упростить еще дальше вниз по линии. Здесь вы можете найти очень хороший учебник, чтобы прочитать на:

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

Однако я настоятельно рекомендую, чтобы узнать CMake вместо этого как писать Makefiles вручную болезненны.

CMakeLists.txt файл может быть что-то вроде этого:

add_executable(main main.cpp) 

тогда просто:

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

, а затем вы будете делать в кроссплатформенной манере, как GNU Makefiles работать только на юниксы , Вам нужно будет настроить это для Windows и т. Д., Чтобы заставить его работать. cmake свободно доступен практически везде, и он имеет надлежащую поддержку для собственных сборников, кросс-компиляции.

Этот форум также имеет тег cmake с несколькими людьми вокруг, чтобы помочь вам.

4

Я использую «редактировать-и-компиляцию» подход mrkite, как описан в http://echochamber.me/viewtopic.php?f=11&t=12301

Он нуждается только волшебное колдовством на вершине, чтобы объявить это Баш файл, то GCC вызывается с любыми и всеми флагами, которые вы хотите и установить для чтения из текущего файла. Одно волшебное слово в конце заставляет его остановить сканирование; и после этого вы можете сразу запустить скомпилированный код или сделать что-нибудь еще.

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

@Jongware спасибо! Я впервые увидел, что bitcoin.c использовал это, но предложенная вами версия использует doc-here в bash! Великий!

Я немного улучшил его. Теперь вы можете скомпилировать и

sh program.cpp 

и

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 
Смежные вопросы