Jak utworzyć alias polecenia na linuxie (w msys na Windowsie)?

0

Dzień dobry.

Jak mogę stworzyć wzór do programowania, inaczej alias, by nie musieć przepisywać za każdym razem całego polecenia, z flagami, tylko np.

Zamiast: g++ `fltk-config --cxxflags` nazwaPliku.cpp `fltk-config --ldflags` -o nazwaPlikuDocelowego
Użyć np.: kompiluj nazwaPliku

Jak to zrobić?

0

Wykorzystaj IDE :P

0

A jak się tworzy MakeFile? Nie mam o tym bladego pojęcia

0

I tak ciężko Ci wpisać w Google makefile tutorial?
Abstrahując od tego, że akurat nie jest to rozwiązaniem problemu - źle Cię zrozumiałem na początku.

0

Na temat odpowiadaj w postach;

Nie wiem, czy mogę wykorzystać IDE. Programuję w C++, z biblioteką FastLibraryToolKit (FLTK), i mogę kompilować tylko przez msys, taką wirtualną konsolę linuksową, dołączoną do MinGW, na Windowsa

Nie byłoby Ci zatem wygodniej kompilować na maszynie wirtualnej?

0

Nie, bo program kompiluje się, jako program Windowsowy. Piszę pod Windows, tylko muszę kompilować przez msys (przynajmniej na tym etapie wiedzy jestem)

0

Dlaczego musisz kompilować przez msys?

0

W samouczku instalacji biblioteki FLTK było napisane, że trzeba to zrobić przy użyciu msys. Po instalacji msys dodał odpowiednie pliki, zarówno nagłówkowe, jak i skompilowane, w miejsca podobne do katalogów linuxowych. Nie wiem dokładnie dlaczego, ale kompilacja w g++, z cmd nie działa (nie działa, w przypadku kompilacji plików źródłowych, zawierających elementy FLTK), natomiast w msys działa.

http://www.fltk.org/articles.php?L598+I140+T+P1+Q

0

Pod linuksem istnieje komenda alias. Wstawią się ją np. w .bashrc, żeby była trwała pomiędzy sesjami.

0

A czy alias umożliwia przekazywanie parametrów wewnątrz niego samego?
Jak mam taką komendę: g++ `fltk-config --cxxflags` nazwaPliku.cpp `fltk-config --ldflags` -o nazwaPlikuDocelowego,
i jako alias użyję g++ `fltk-config --cxxflags` `fltk-config --ldflags` -o nazwaPlikuDocelowego,
to jak przekazać parametr w postaci pliku.cpp, który miałby być wstawiony pomiędzy `fltk-config --cxxflags` a `fltk-config --ldflags` ?

Czy może trzeba napisać skrypt?

2

Najlepszy IMHO mimo wszystko byłby tutaj Makefile:

# Nasz kompilator, by w razie czego móc szybko wymienić na inny, np. clang
CXX = g++

# Flagi kompilacji
CXXFLAGS = `fltk-config --cxxflags` -Wall

# Flagi linkowania
LDFLAGS = `fltk-config --ldflags`

SOURCES = nazwaPliku.cpp # chyba nie trzeba tłumaczyć
OBJ = $(SOURCES:.cpp=.o) # wszystkie wpisy w $SOURCES z zamienionym rozszerzeniem z .cpp na .o

EXECUTABLE = nazwaPlikuDocelowego (tłumaczyć też chyba nie trzeba)

# Zadanie domyślne (pierwsze z góry), które buduje plik $(EXECUTABLE)
all: $(EXECUTABLE)

# Zbudowanie pliku $(EXECUTABLE) wymaga zbudowania wszystkich plików w $(OBJ)
# Zadanie mówi tyle co odpal program $(CXX) (w naszym przypadku g++) z flagami $(LDFLAGS) oraz wszystkimi zależnościami (w tym przypadku $(OBJ)) i flagą -o nazwa_zadania
$(EXECUTABLE): $(OBJ)
	$(CXX) $(LDFLAGS) $+ -o $@

# Dowolny plik z rozszerzeniem .cpp jest budowany do pliku .o używając tego zadania
.cpp.o:
	$(CXX) -c $(CFLAGS) $< -o $@

# Dobrą tradycją jest tworzenie zadania clean, które wyczyści wszystkie zbudowane pliki
clean:
	rm -f $(EXECUTABLE) $(OBJ)

# Zadanie all nie tworzy pliku o nazwie `all` tylko jest "meta"
.PHONY: all clean

Następnie zakładając, że ww. plik masz w tym samym katalogu co twój projekt pod nazwą Makefile możesz cały projekt zbudować prostym poleceniem make.

EDIT: Mały przykład jak tego używać https://github.com/put-poznan/mls

0
echo "alias kompiluj='g++ \`fltk-config --cxxflags\` nazwaPliku.cpp \`fltk-config --ldflags\`'" >> ~/.bash_aliases
source ~/.bash_aliases
type kompiluj

to -o nazwaPlikuDocelowego musisz sobie dopisac za kazdym razem

dobra nie będzie działać, bo mi markdown na 4p nie przepuszcza odpowiednio znaczka \ (escape), w kazdym razie to echo trzeba ulozyc dobrze
http://wiki.bash-hackers.org/syntax/quoting

0

A może małe obejście, stwórz plik bat i używaj

@echo off
set /p plik="Podaj nazwe pliku cpp: "
g++ `fltk-config --cxxflags` %plik%.cpp `fltk-config --ldflags` -o nazwaPlikuDocelowego
pause

albo taki

@echo off
set arg1=%1
g++ `fltk-config --cxxflags` %arg1%.cpp `fltk-config --ldflags` -o nazwaPlikuDocelowego

Dla drugiego bata musisz być w katalogu z nim i używasz:

nazwaplikubat nazwaplikucpp
0

A czy można taki plik .bat dodać do poleceń msys tak, abym mógł go wykonywać z dowolnego katalogu?

Kod, z postu wyżej, nie działa

$ kompiluj.bat przyklad1.cpp
./kompiluj.bat: line 1: @echo: command not found
g++.exe: error: %arg1%.cpp: No such file or directory

A jeżeli chodzi o makefile, to chyba nie działa to elastycznie, tzn. muszę w pliku zapisać nazwę pliku wyjściowego i wejściowego, tak?

0

Co rozumiesz przez "elastycznie"? Tak musisz tam wpisać nazwę pliku wyjściowego (pliki wejściowe można załatwić funkcją wildcard), ale to tylko raz na projekt. Ewentualnie możesz sobie też zrobić tak, że każdy plik zostanie zamieniony na plik wykonywalny w danym katalogu, wszystko zależy jak zdefiniujesz sobie zadania.

W większości przypadków masz jakiś projekt, który zawiera więcej plików niż 1 i musisz jakoś je wszystkie zbudować, najlepiej tak, by po zmianie w 1 pliku kompilować tylko część projektu, a nie całość. To właśnie zapewnia Ci make.

Cała ta dyskusja wygląda mi mocno na problem XY.

1 użytkowników online, w tym zalogowanych: 0, gości: 1