我正在尝试进入C ++,但是因为我必须使用冗长的命令在命令行中运行,所以我想制作一个bash脚本来简化流程并运行这些命令
#!/bin/bash
if [ "$1" == "start" ]; then
cd CCPP
cd HelloWorld
g++ -Wall -W -Werror main.cpp -o HelloWorldCPP
./HelloWorldCPP
但我之前从未使用过bash,并且从别人的代码中将它们一起攻击。它不起作用,但我不知道为什么我不够了解。
答案 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