Tworzenie skryptu bash do kompilacji / wykonywania C ++


1

Próbuję stworzyć prosty skrypt, który skompiluje test.cpp, ale nie mogę go uruchomić. Uruchamiam skrypt w następujący sposób:

> bash make.sh

I pojawia się następujący błąd:

: No such file or directory
g++: no input files
make.sh: line 3: ./test.out: No such file or directory

Oto make.sh:

#!/bin/sh
g++ -o ./test.out ./test.cpp
./test.out

Próbowałem bez „./” i nadal nie działa. Używam Cygwin na Windows 7 z zainstalowanymi wszystkimi właściwymi pakietami (mogę skompilować i uruchomić z samej powłoki, ale nie ze skryptu).


Zamień ./ na ścieżkę bezwzględną! Na przykład: /home/MyName/test.cpp
Sepahrad Salour

Musisz uruchomić to w tym samym katalogu.
Daniel Beck

jakie są uprawnienia do pliku skryptu? czy bit wykonawczy jest włączony?
Frank Thomas

Odpowiedzi:


2

Czy tworzysz za make.shpomocą Notatnika? Jeśli tak, każda linia kończy się na CR(powrót karetki) i LF(przesunięcie linii). Cygwin i jego programy podobne do Uniksa nie mogą sobie z tym poradzić; Unix oczekuje, że linie w plikach tekstowych kończą się tylko znakiem LF(który Unix nazywa znakiem „nowej linii”). Edytuj plik za pomocą edytora Cygwin (np. viLub vim) i napraw go. Jeśli nie możesz tego zrobić, spróbuj dodać „ ; #” na końcu każdej linii; powinno to spowodować bashpotraktowanie przestępców CRjako komentarzy.

Aby rozwinąć powyższe: jeśli moja teoria jest poprawna, druga linia make.shwygląda następująco:

g++ -o ./test.out ./test.cppCR

plus te, LFktóre powinny tam być (co bashwyklucza wzięcie pod uwagę). Tak więc g++szuka pliku o nazwie „ ./test.cppCR”, który oczywiście nie istnieje. Więc mówi:

./test.cppCR: No such file or directory

Ale ze względu na to, co jest znakiem powrotu karetki, powoduje : No such file or directoryto zastąpienie znaku ./test.cpp, więc : No such file or directorywszystko, co widzisz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.