0

这些天我正在学习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 但它似乎适用于特定名称;有一些方法可以将参数传递给makefile,但对我来说似乎还是太麻烦了(我必须手动输入 ARGUMENT=filename 部分)。

另外我认为 shell 脚本可能是一个很好的解决方案。唯一的后备是我必须为 shell 脚本自定义一个名称。

我想知道是否有更好的方法让我快速编译和运行 opengl cpp 文件

非常感谢。

4

2 回答 2

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的更多信息

更新:这是一个小的单线,将生成您需要的所有目标。如果需要,您可以将其扩展为脚本,以便您可以更好地控制它。

ls *.cpp | perl -ne 'chomp; $n=$_; $n=~s/\.cpp$//; print "$n: $_\n\t\$(CC) \$(PARAM) \${ARGS} $_ -o $n\n";' >> Makefile

除此之外,我通常会手写我的目标。如果您想要真正通用的东西,@Emil Sit 的解决方案可能会更好。

于 2013-03-27T04:10:18.150 回答
2

我认为您希望能够执行以下操作:

make foo

(例如,来自vim),foo具体取决于您使用的源文件。

要实现这一点make,您需要使用模式规则

例如:

CXX=g++
CXX_FLAGS=-framework GLUT -framework OpenGL -framework Cocoa

%: %.cpp
    $(CXX) $(CXX_FLAGS) -o $@ $<
    ./$@

这应该允许您运行make hello,它将:

  • hello构建在当前目录中调用的可执行文件(如果hello.cpp已更改)。
  • 为你运行hello,如果它决定编译并且编译成功。
于 2013-03-27T04:24:09.730 回答