2013-08-24 109 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一起工作過,並且從別人的代碼中把它們一起砍了。它不工作,但我不知道爲什麼,因爲我不知道。

+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的,而不是作爲學習寫Makefile文件手動是痛苦的。

一個的CMakeLists.txt文件可能是這樣的:

add_executable(main main.cpp) 

後來乾脆:

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

,然後你會在一個跨平臺的方式爲GNU Makefile文件在Unix系統唯一的工作要做。你需要對Windows進行調整等等。 cmake幾乎可以在任何需要的地方免費獲得,並且它對原生構建,交叉編譯有適當的支持。

這個論壇還有一個cmake標籤,周圍有幾個人來幫助你。

4

我用mrkite的「編輯和編譯」的方法在http://echochamber.me/viewtopic.php?f=11&t=12301

它只需要一個魔法咒語在頂部聲明它是一個bash文件,然後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