这些天我正在学习opengl,我正在从命令行编译(我不想使用IDE,因为我已经习惯了VIM)。编译opengl文件可能很麻烦,比如我有一个名为hello.cpp的文件,用于快速编译和运行我必须这样做:
g++ -framework GLUT -framework OpenGL -framework Cocoa hello.cpp & ./a.out
由于我正在学习opengl,我将使用大量不同的文件进行测试,因此我无法一直输入上述命令。我想要的是:
some_command % & ./a.out
some_command最好是一些常用的(如g ++,make),%是文件名。
我认为makefile可能是一个可能的解决方案,所以我继续学习makefile,但它似乎正在为一个特定的名称工作;有methods to pass parameters to makefile,但对我来说似乎太麻烦了(我必须手动输入ARGUMENT =文件名部分)。
另外我认为shell脚本可能是一个很好的解决方案..唯一的后备是我必须自定义shell脚本的名称。
我想知道是否有更好的方法让我快速编译和运行opengl cpp文件
非常感谢。
答案 0 :(得分:4)
使用Makefile
CC=g++
PARAM=-framework GLUT \
-framework OpenGL \
-framework Cocoa #\
hello: hello.cpp
$(CC) $(PARAM) ${ARGS} hello.cpp -o hello
然后使用make hello; ./hello;
您可能想知道${ARGS}
是什么。它适用于自定义命令行参数。所以现在你可以做make ARGS="-framework CustomX" hello; ./hello;
这样的事情,它会被添加到你在Makefile中的其他g ++选项中。
您可以阅读有关GNU Makefile here,here和here
的更多信息更新:这是一个小型单行程序,可生成您需要的所有目标。 如果需要,可以将其扩展为脚本,以便对其进行更多控制。
ls *.cpp | perl -ne 'chomp; $n=$_; $n=~s/\.cpp$//; print "$n: $_\n\t\$(CC) \$(PARAM) \${ARGS} $_ -o $n\n";' >> Makefile
除此之外,我通常手工编写目标。 @Emil Sit的解决方案可能会更好,如果你想要一些非常普遍的东西。
答案 1 :(得分:2)
我认为你希望能够做到这样的事情:
make foo
(例如,来自vim
),foo
根据您使用的源文件而有所不同。
要在make
中实现此目的,您需要使用pattern rule。
例如:
CXX=g++
CXX_FLAGS=-framework GLUT -framework OpenGL -framework Cocoa
%: %.cpp
$(CXX) $(CXX_FLAGS) -o $@ $<
./$@
这应该允许您运行make hello
,它将:
hello
的可执行文件(如果hello.cpp
已更改)。hello
。