0

私は最近openglを学んでいて、コマンドラインからコンパイルしています(VIMに慣れているのでIDEを使いたくありません)。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の部分を手動で入力する必要があります)。

また、シェルスクリプトは良い解決策かもしれないと思います。唯一のフォールバックは、シェルスクリプトの名前を自己定義する必要があるということです。

openglcppファイルをすばやくコンパイルして実行するためのより良い方法があるかどうか知りたい

どうもありがとう。

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 に答える