用于编译和运行C ++的bash脚本

时间:2013-08-24 15:08:28

标签: c++ bash makefile

我正在尝试进入C ++,但是因为我必须使用冗长的命令在命令行中运行,所以我想制作一个bash脚本来简化流程并运行这些命令

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

但我之前从未使用过bash,并且从别人的代码中将它们一起攻击。它不起作用,但我不知道为什么我不够了解。

3 个答案:

答案 0 :(得分:6)

你最后缺少fi,但你也可以这样写一个GNU Makefile:

CXX=g++
CXXFLAGS=-Wall
OBJS=main.o
EXECUTABLE=main

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJS)
        $(CXX) $(CXXFLAGS) $(OBJS) -o $@


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 Makefiles仅适用于Unices。您需要针对Windows等进行调整才能使其正常工作。 cmake几乎可以在任何需要的地方免费使用,并且它对本机构建,交叉编译有适当的支持。

这个论坛还有一个cmake标签,周围有几个人可以帮助你。

答案 1 :(得分: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

答案 2 :(得分:1)

@Jongware谢谢!我第一次看到bitcoin.c正在使用它,但是你建议的版本在bash中使用了doc-here!大!

我有点改进了。现在你可以编译两个

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