前の関連記事:LibreOffice(22)FirstStepsのMakefileで使うJDKのコマンド
FirstStepsのMakefileを実行したコマンドラインの結果をみてみます。LibreOffice(19)Javaの例をmakeするのコマンドウィンドウで出力された結果です。
コマンドウィンドウの出力結果
19行目以降がmakeが出力したものです。
****************************************************************** * * SDK environment is prepared for Windows * * SDK = C:\PROGRA~2\LIBREO~1\sdk * Office = C:\PROGRA~2\LIBREO~1 * URE = C:\PROGRA~2\LIBREO~1\URE * Make = C:\mingw\bin * Zip = C:\mingw\bin * C++ Compiler = C:\PROGRA~2\MICROS~1.0\VC\bin * C# and VB.NET compilers = C:\Windows\MICROS~1.NET\FRAMEW~2\V20~1.507 * Java = C:\Java\JDK17~1.0_1 * Special Output directory = c:\LIBREO~1.1_S * Auto deployment = NO * ****************************************************************** C:\Program Files (x86)\LibreOffice 4\sdk\examples\DevelopersGuide\FirstStepsのMakefileをmakeしますか?(y/n)y '..' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.class] Error 1 (ignored) "C:\Java\JDK17~1.0_1/bin/javac" -classpath "C:\PROGRA~2\LIBREO~1\URE\java\juh.jar;C:\PROGRA~2\LIBREO~1\URE\java\jurt.jar;C:\PROGRA~2\LIBREO~1\URE\java\ridl.jar;C:\PROGRA~2\LIBREO~1\URE\java\unoloader.jar;C:\PROGRA~2\LIBREO~1\program\classes\unoil.jar;c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples" -d c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples FirstUnoContact.java del c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\FirstUnoContact.jar c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\FirstUnoContact.jar が見つかりませんでした。 mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.jar] Error 1 (ignored) cd c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples && "C:\Java\JDK17~1.0_1/bin/jar" cvfm FirstUnoContact.jar FirstUnoContact.mf FirstUnoContact.class マニフェストが追加されました FirstUnoContact.classを追加中です(入=1295)(出=753)(41%収縮されました) "C:\Java\JDK17~1.0_1/bin/jar" uvf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.jar -C ../../../classes com/sun/star/lib/loader/Loader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/Loader$CustomURLClassLoader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder$StreamGobbler.class -C ../../../classes com/sun/star/lib/loader/WinRegKey.class -C ../../../classes com/sun/star/lib/loader/WinRegKeyException.class -C ../../../classes win/unowinreg.dll com/sun/star/lib/loader/Loader.classを追加中です(入=9278)(出=4377)(52%収縮されました) com/sun/star/lib/loader/Loader$Drain.classを追加中です(入=739)(出=445)(39%収縮されました) com/sun/star/lib/loader/Loader$CustomURLClassLoader.classを追加中です(入=1248)(出=636)(49%収縮されました) com/sun/star/lib/loader/InstallationFinder.classを追加中です(入=8900)(出=4866)(45%収縮されました) com/sun/star/lib/loader/InstallationFinder$StreamGobbler.classを追加中です(入=960)(出=542)(43%収縮されました) com/sun/star/lib/loader/WinRegKey.classを追加中です(入=4779)(出=2430)(49%収縮されました) com/sun/star/lib/loader/WinRegKeyException.classを追加中です(入=475)(出=287)(39%収縮されました) win/unowinreg.dllを追加中です(入=5632)(出=1462)(74%収縮されました) mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.mf] Error 1 (ignored) mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.class] Error 1 (ignored) "C:\Java\JDK17~1.0_1/bin/javac" -classpath "C:\PROGRA~2\LIBREO~1\URE\java\juh.jar;C:\PROGRA~2\LIBREO~1\URE\java\jurt.jar;C:\PROGRA~2\LIBREO~1\URE\java\ridl.jar;C:\PROGRA~2\LIBREO~1\URE\java\unoloader.jar;C:\PROGRA~2\LIBREO~1\program\classes\unoil.jar;c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples" -d c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples FirstLoadComponent.java del c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\FirstLoadComponent.jar c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\FirstLoadComponent.jarが見つかりませんでした。 mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.jar] Error 1 (ignored) cd c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples && "C:\Java\JDK17~1.0_1/bin/jar" cvfm FirstLoadComponent.jar FirstLoadComponent.mf FirstLoadComponent.class マニフェストが追加されました FirstLoadComponent.classを追加中です(入=4516)(出=2306)(48%収縮されました) "C:\Java\JDK17~1.0_1/bin/jar" uvf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.jar -C ../../../classes com/sun/star/lib/loader/Loader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/Loader$CustomURLClassLoader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder$StreamGobbler.class -C ../../../classes com/sun/star/lib/loader/WinRegKey.class -C ../../../classes com/sun/star/lib/loader/WinRegKeyException.class -C ../../../classes win/unowinreg.dll com/sun/star/lib/loader/Loader.classを追加中です(入=9278)(出=4377)(52%収縮されました) com/sun/star/lib/loader/Loader$Drain.classを追加中です(入=739)(出=445)(39%収縮されました) com/sun/star/lib/loader/Loader$CustomURLClassLoader.classを追加中です(入=1248)(出=636)(49%収縮されました) com/sun/star/lib/loader/InstallationFinder.classを追加中です(入=8900)(出=4866)(45%収縮されました) com/sun/star/lib/loader/InstallationFinder$StreamGobbler.classを追加中です(入=960)(出=542)(43%収縮されました) com/sun/star/lib/loader/WinRegKey.classを追加中です(入=4779)(出=2430)(49%収縮されました) com/sun/star/lib/loader/WinRegKeyException.classを追加中です(入=475)(出=287)(39%収縮されました) win/unowinreg.dllを追加中です(入=5632)(出=1462)(74%収縮されました) mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsEx amples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.mf] Error 1 (ignored) mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.class] Error 1 (ignored) "C:\Java\JDK17~1.0_1/bin/javac" -classpath "C:\PROGRA~2\LIBREO~1\URE\java\juh.jar;C:\PROGRA~2\LIBREO~1\URE\java\jurt.jar;C:\PROGRA~2\LIBREO~1\URE\java\ridl.jar;C:\PROGRA~2\LIBREO~1\URE\java\unoloader.jar;C:\PROGRA~2\LIBREO~1\program\classes\unoil.jar;c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples" -d c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples HelloTextTableShape.java del c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\HelloTextTableShape.jar c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples\HelloTextTableShape.jarが見つかりませんでした。 mkdir c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples サブディレクトリまたはファイル c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples は既に存在します。 mingw32-make: [c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.jar] Error 1 (ignored) cd c:\LIBREO~1.1_S\WINexample.out\class\FirstStepsExamples && "C:\Java\JDK17~1.0_1/bin/jar" cvfm HelloTextTableShape.jar HelloTextTableShape.mf HelloTextTableShape.class マニフェストが追加されました HelloTextTableShape.classを追加中です(入=8572)(出=4348)(49%収縮されました) "C:\Java\JDK17~1.0_1/bin/jar" uvf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.jar -C ../../../classes com/sun/star/lib/loader/Loader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/Loader$CustomURLClassLoader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder$StreamGobbler.class -C ../../../classes com/sun/star/lib/loader/WinRegKey.class -C ../../../classes com/sun/star/lib/loader/WinRegKeyException.class -C ../../../classes win/unowinreg.dll com/sun/star/lib/loader/Loader.classを追加中です(入=9278)(出=4377)(52%収縮されました) com/sun/star/lib/loader/Loader$Drain.classを追加中です(入=739)(出=445)(39%収縮されました) com/sun/star/lib/loader/Loader$CustomURLClassLoader.classを追加中です(入=1248)(出=636)(49%収縮されました) com/sun/star/lib/loader/InstallationFinder.classを追加中です(入=8900)(出=4866)(45%収縮されました) com/sun/star/lib/loader/InstallationFinder$StreamGobbler.classを追加中です(入=960)(出=542)(43%収縮されました) com/sun/star/lib/loader/WinRegKey.classを追加中です(入=4779)(出=2430)(49%収縮されました) com/sun/star/lib/loader/WinRegKeyException.classを追加中です(入=475)(出=287)(39%収縮されました) win/unowinreg.dllを追加中です(入=5632)(出=1462)(74%収縮されました) -------------------------------------------------------------------------------- Please use one of the following commands to execute the examples! - mingw32-make FirstUnoContact.run mingw32-make FirstLoadComponent.run mingw32-make HelloTextTableShape.run -------------------------------------------------------------------------------- 続行するには何かキーを押してください . . .
'..' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。これはC:\Program Files (x86)\LibreOffice 4\sdk\settings\settings.mkにでてくるPLATFORM := $(shell $(PRJ)/config.guess | cut -d"-" -f3,4)の部分が出しているエラーです。
$(shell コマンド)でコマンドラインにコマンドが渡されてその結果が返されます。
この場合は../../../config.guess | cut -d"-" -f3,4というコマンドがコマンドウィンドウに渡されるのですがWindowsにはこのようなコマンドはないのでエラーになっています。
なのでsettings.mkのこの部分では変数PLATFORMには何も入りませんが次のコードでその場合はwindowsと代入するようになっているので問題ありません。
ほかにでているエラーは既に存在するディレクトリを作成しようとしたり、存在しないjarファイルを削除しようとしたりしているものなのでこれらも問題ありません。
FirstStepsのMakefileの変数を展開したもの
FirstStepsのMakefileの# Targets以降の自動変数以外の変数を展開してみます。
# Targets .PHONY: ALL ALL : FirstStepsExamples include ../../../settings/stdtarget.mk c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.class : %.java -mkdir $(subst /,\,$(@D)) "C:\Java\JDK17~1.0_1/bin/javac" -classpath "C:\PROGRA~2\LIBREO~1\URE\java\juh.jar;C:\PROGRA~2\LIBREO~1\URE\java\jurt.jar;C:\PROGRA~2\LIBREO~1\URE\java\ridl.jar;C:\PROGRA~2\LIBREO~1\URE\java\unoloader.jar;C:\PROGRA~2\LIBREO~1\program\classes\unoil.jar;c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples" -d c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples $< c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.mf : -mkdir $(subst /,\,$(@D)) @echo Main-Class: com.sun.star.lib.loader.Loader> $@ @echo.>> $@ @echo Name: com/sun/star/lib/loader/Loader.class>> $@ @echo Application-Class: $*>> $@ c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.jar : c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.mf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.class -del $(subst \\,\,$(subst /,\,$@)) -mkdir $(subst /,\,$(@D)) +cd $(subst /,\,c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples) && "C:\Java\JDK17~1.0_1/bin/jar" cvfm $(@F) $*.mf $*.class +"C:\Java\JDK17~1.0_1/bin/jar" uvf $@ -C ../../../classes com/sun/star/lib/loader/Loader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/Loader$CustomURLClassLoader.class -C ../../../classes com/sun/star/lib/loader/Loader$Drain.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder.class -C ../../../classes com/sun/star/lib/loader/InstallationFinder$StreamGobbler.class -C ../../../classes com/sun/star/lib/loader/WinRegKey.class -C ../../../classes com/sun/star/lib/loader/WinRegKeyException.class -C ../../../classes win/unowinreg.dll c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.jar : c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.mf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.class c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.jar : c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.mf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.class c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.jar : c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.mf c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.class FirstStepsExamples : c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.jar c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstLoadComponent.jar c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/HelloTextTableShape.jar @echo -------------------------------------------------------------------------------- @echo Please use one of the following commands to execute the examples! @echo - @echo mingw32-make FirstUnoContact.run @echo mingw32-make FirstLoadComponent.run @echo mingw32-make HelloTextTableShape.run @echo -------------------------------------------------------------------------------- %.run: c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.jar "C:\Java\JDK17~1.0_1/bin/java" -Dcom.sun.star.lib.loader.unopath="C:\PROGRA~2\LIBREO~1\program" -jar $< .PHONY: clean clean : -rd /S /Q $(subst /,\,c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples)自動変数についてはLibreOffice(21)makeについてちょっとお勉強 その2で学習しました。
3行目が最初のルールになります。
ターゲットALLの依存関係であるFirstStepsExamplesがターゲットになっているルールを探すと28行目にあります。
このルールの依存関係にあるファイルがターゲットになっているルールを探すと24,25,26行目にあります。
で、さらにこれらのルールの依存関係にあるファイルがターゲットになっているルールを探すと18行目と11行目にあります。
18行目の依存関係にあるファイルがターゲットになっているルールは7行目にあります。
ということで7行目のルールのコマンドから実行されます。
あとはターゲットが完成したらそれが依存関係になっているルールが実行されていきます。
コマンドの前にある"-"はエラーがでてもそれを無視して次のコマンドを実行するというものでした。
では"+"はその逆にエラーでとまるという意味かというとそうではありまえん。
エラーで止まるようにするには"-"をつかなければよいだけです。
"+"はmakeのオプションの"-n","-t","-q"が"+"が先頭にあるコマンドには影響させないという記号です。
21行目のコマンド行の中途にある"&&"はその左にあるコマンドが実行されないとその右のコマンドが実行されない、という記号です。
完成したjarファイルを実行する方法
-------------------------------------------------------------------------------- Please use one of the following commands to execute the examples! - mingw32-make FirstUnoContact.run mingw32-make FirstLoadComponent.run mingw32-make HelloTextTableShape.run --------------------------------------------------------------------------------
コンパイルの最後に表示されるこの方法で完成したjarファイルが実行できます。
ただしMakefileの中で変数を展開しないといけないのでsetsdkenv_windows.batをその前に実行しておかないといけません。
makeの後に引数をつけるとその引数にあうターゲットのルールを指定して実行できます。
現在makeはmingw32-make.exeを使っているのでmingw32-make FirstUnoContact.runとするとMakefileの中のFirstUnoContact.runというターゲットのあるルールが実行されることになります。
自動変数を展開してコマンド部分を取り出すと以下のようになります。
と思ったら何も表示されません。
エラーもでないのですけどSystem.out.println("Connected to a running office ...");でまず表示されるはずの"Connected to a running office ..."もなにも表示されません。
何かはしているようなのですが何も表示されずに次のプロンプトが表示されて終わります。
FirstUnoContact.jarだけでなくFirstLoadComponent.jarとHelloTextTableShape.jarも同じ結果です。
ここまできたのにちょっとお手上げです。
Windowsではうまく動かないのかもしれません。
(H25.2.20追記。Windows7 64bitではJavaのbootstrap()は動かないようでJavaの例はソケット接続に修正しないと動きません。詳しくはLibreOffice(27)Java-UNO Bootstrapはやめてソケット接続を使おうへ。)
ただしMakefileの中で変数を展開しないといけないのでsetsdkenv_windows.batをその前に実行しておかないといけません。
makeの後に引数をつけるとその引数にあうターゲットのルールを指定して実行できます。
現在makeはmingw32-make.exeを使っているのでmingw32-make FirstUnoContact.runとするとMakefileの中のFirstUnoContact.runというターゲットのあるルールが実行されることになります。
%.run: c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/%.jar "C:\Java\JDK17~1.0_1/bin/java" -Dcom.sun.star.lib.loader.unopath="C:\PROGRA~2\LIBREO~1\program" -jar $<FirstUnoContact.runで実行されるルールはこの型ルールになります。
自動変数を展開してコマンド部分を取り出すと以下のようになります。
"C:\Java\JDK17~1.0_1/bin/java" -Dcom.sun.star.lib.loader.unopath="C:\PROGRA~2\LIBREO~1\program" -jar c:/LIBREO~1.1_S/WINexample.out/class/FirstStepsExamples/FirstUnoContact.jarさあ、これをコマンドウィンドウで実行するとうまくいくはず、、、
と思ったら何も表示されません。
エラーもでないのですけどSystem.out.println("Connected to a running office ...");でまず表示されるはずの"Connected to a running office ..."もなにも表示されません。
何かはしているようなのですが何も表示されずに次のプロンプトが表示されて終わります。
FirstUnoContact.jarだけでなくFirstLoadComponent.jarとHelloTextTableShape.jarも同じ結果です。
ここまできたのにちょっとお手上げです。
Windowsではうまく動かないのかもしれません。
(H25.2.20追記。Windows7 64bitではJavaのbootstrap()は動かないようでJavaの例はソケット接続に修正しないと動きません。詳しくはLibreOffice(27)Java-UNO Bootstrapはやめてソケット接続を使おうへ。)
参考にしたサイト
GNU make 日本語訳(Coop編) - shell 関数
MS-DOS/MS-Windowsのcommand.com/cmd.exeではちゃんと動かないようです。
GNU make 日本語訳(Coop編) -コマンドを実行する代わりに…
makeのオプションの"-n","-t","-q"は"+"が先頭にあるコマンドには無効です。
「&&」 - DOS コマンド一覧
"&&"の左にあるコマンドが実行されないと"&&"の右のコマンドが実行されません。
0 件のコメント:
コメントを投稿