差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
gnustep:gnustep-make [2025/05/24 09:35] – freemikan | gnustep:gnustep-make [2025/06/13 12:43] (現在) – [例2: Hello Panel] Add puctuations freemikan | ||
---|---|---|---|
行 1: | 行 1: | ||
====== GNUstep Make ====== | ====== GNUstep Make ====== | ||
- | + | [[gnustep:|{{: | |
- | {{: | + | |
GNUstepは、GNU MakeのMakefileのコレクションによる、独自のビルドツールを提供しています。 | GNUstepは、GNU MakeのMakefileのコレクションによる、独自のビルドツールを提供しています。 | ||
行 8: | 行 7: | ||
このビルドツールをGNUstep Makeと呼ぶことにします。 | このビルドツールをGNUstep Makeと呼ぶことにします。 | ||
- | いくつかの簡単なルールを覚えてしまえば、手動で直接ObjCコンパイラを実行したり、自前のMakefileを書いたりする手間が大幅に省けるようになります。 | + | いくつかの簡単なルールを覚えてしまえば、手動で直接Objective-Cコンパイラを実行したり、自前のMakefileを書いたりする手間が大幅に省けるようになります。 |
- | たとえ単純なHello Worldプログラムであっても、直接ObjCコンパイラを呼び出すよりも、GNUstep Makeを利用する方が楽ができます。 | + | たとえ単純なHello Worldプログラムであっても、直接Objective-Cコンパイラを呼び出すよりも、GNUstep Makeを利用する方が楽ができます。 |
- | したがって、ObjC+GNUstepのプログラミングを続けるのに次に越えなければならないハードルは、GNUstep Makeのルールを覚えることであると言えます。 | + | したがって、Objective-C+GNUstepのプログラミングを続けるのに次に越えなければならないハードルは、GNUstep Makeのルールを覚えることであると言えます。 |
===== Ubuntu 24.04 LTS ===== | ===== Ubuntu 24.04 LTS ===== | ||
- | パッケージ__gnustep-make__がインストールされていることを確認します。 | + | パッケージgnustep-makeがインストールされていることを確認します。 |
- | このパッケージは__gnustep-devel__をインストールした場合、同時にインストールされています。 | + | このパッケージはgnustep-develをインストールした場合、同時にインストールされています。 |
- | __gnustep-make__には、GNUstep Makeの環境をアクティブにするスクリプトが含まれています。 | + | gnustep-makeには、GNUstep Makeの環境をアクティブにするスクリプトが含まれています。 |
そのシェルスクリプトを現在のシェルにソースすることで、GNUstep Makeが利用可能な状態になります。 | そのシェルスクリプトを現在のシェルにソースすることで、GNUstep Makeが利用可能な状態になります。 | ||
行 25: | 行 24: | ||
</ | </ | ||
- | GNUstep自体をソースからインストールした場合は、__/ | + | GNUstep自体をソースからインストールした場合は、/ |
シェルを立ち上げるたびに毎回このコマンドを実行する必要があります。 | シェルを立ち上げるたびに毎回このコマンドを実行する必要があります。 | ||
それほど長いコマンドではありませんが、面倒であればシェルのaliasを設定しておくと良いです。 | それほど長いコマンドではありませんが、面倒であればシェルのaliasを設定しておくと良いです。 | ||
- | __$HOME/.bashrc__などに次の1行を追加しておきます。 | + | $HOME/.bashrcなどに次の1行を追加しておきます。 |
<code shell> | <code shell> | ||
行 40: | 行 39: | ||
[[helloworld|以前やったHello Worldプログラム]]をGNUstep Makeを使ってビルドしてみます。 | [[helloworld|以前やったHello Worldプログラム]]をGNUstep Makeを使ってビルドしてみます。 | ||
まず新たに適当な名前のディレクトリを作ります。 | まず新たに適当な名前のディレクトリを作ります。 | ||
- | その中に__hello.m__という名前のObjCのソースファイルを作成します。 | + | その中にhello.mという名前のObjective-Cのソースファイルを作成します。 |
__hello.m__: | __hello.m__: | ||
行 55: | 行 54: | ||
</ | </ | ||
- | 同じディレクトリに__GNUmakefile__という名前のファイルを作成します。 | + | 同じディレクトリにGNUmakefileという名前のファイルを作成します。 |
__GNUmakefile__: | __GNUmakefile__: | ||
行 71: | 行 70: | ||
* common.makeというMakefileをインクルードしている | * common.makeというMakefileをインクルードしている | ||
* '' | * '' | ||
- | * '' | + | * '' |
* tool.makeというMakefileをインクルードしている | * tool.makeというMakefileをインクルードしている | ||
行 104: | 行 103: | ||
</ | </ | ||
- | __obj__というディレクトリの中に実行可能バイナリファイルが生成されています。 | + | objというディレクトリの中に実行可能バイナリファイルが生成されています。 |
HelloWorld/ | HelloWorld/ | ||
行 110: | 行 109: | ||
├── hello.m | ├── hello.m | ||
└── obj | └── obj | ||
- | ├── HelloWorld | + | ├── HelloWorld |
└── HelloWorld.obj | └── HelloWorld.obj | ||
├── hello.m.d | ├── hello.m.d | ||
行 131: | 行 130: | ||
* '' | * '' | ||
- | ObjCのソースコードは変更しなくてもいいのですが、せっかくなのでGUIアプリケーションらしいものに変更してみます。 | + | Objective-Cのソースコードは変更しなくてもいいのですが、せっかくなのでGUIアプリケーションらしいものに変更してみます。 |
適当な名前の新しいディレクトリを作成して、その中に次の2つのファイルを作成します。 | 適当な名前の新しいディレクトリを作成して、その中に次の2つのファイルを作成します。 | ||
- | __hello.m__((このコードは[[https:// | + | hello.m (([[https:// |
<code objc> | <code objc> | ||
行 153: | 行 152: | ||
__GNUmakefile__: | __GNUmakefile__: | ||
- | |||
<code makefile> | <code makefile> | ||
include $(GNUSTEP_MAKEFILES)/ | include $(GNUSTEP_MAKEFILES)/ | ||
行 169: | 行 167: | ||
└── hello.m | └── hello.m | ||
- | __HelloPanel__の中で'' | + | HelloPanelディレクトリの中で'' |
<cli> | <cli> | ||
行 185: | 行 183: | ||
</ | </ | ||
- | __HelloPanel.app__と__obj__の2つのディレクトリが作成されます。 | + | HelloPanel.appとobjの2つのディレクトリが作成されます。 |
ソースツリーの状態は次のようになっています。 | ソースツリーの状態は次のようになっています。 | ||
行 202: | 行 200: | ||
└── hello.m.o | └── hello.m.o | ||
- | 例1のTOOLのときは__obj__ディレクトリに実行可能バイナリファイルが出力されましたが、今度は__HelloPanel.app__の中にあります。 | + | 例1のTOOLのときはobjディレクトリに実行可能バイナリファイルが出力されましたが、今度はHelloPanel.appディレクトリの中にあります。 |
このアプリケーションを実行するには、コマンドラインに直接このファイル名をタイプするのではなく、**openapp**というランチャープログラムを使います。 | このアプリケーションを実行するには、コマンドラインに直接このファイル名をタイプするのではなく、**openapp**というランチャープログラムを使います。 | ||
行 211: | 行 209: | ||
少し補足しておきます。 | 少し補足しておきます。 | ||
- | * カレントディレクトリを示す「./ | + | * カレントディレクトリを示す「./ |
- | * 「.app」は省略可能です => '' | + | * 末尾の「.app」は省略可能です。 => '' |
- | * 末尾に「/ | + | * 末尾に「/ |
実行するとポップアップが表示されます。 | 実行するとポップアップが表示されます。 |