2013-08-24 108 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