2010-12-29 10 views
1

私たちのリポジトリにいくつかの依存関係ライブラリがあります。主要部分はcmakeでビルドされています。 cmake-makefileは、cmakeビルドシステムを持たない依存関係ライブラリをビルドします。ある特定のライブラリについては、使用すべき "Makefile.squirrel"があります。そのライブラリのcmakelists.txt:CMake&ExternalProject:特定のファイルを見つけることができません

cmake_minimum_required (VERSION 2.8) 

include(ExternalProject) 

ExternalProject_Add(squirrel, 
    SOURCE_DIR "./" 
    UPDATE_COMMAND "" 
    BUILD_IN_SOURCE 1 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 
    INSTALL_COMMAND "" 
    ) 

しかし、私はエラーメッセージを取得makeを実行:

[ 93%] Performing build step for 'squirrel,' 
/bin/sh: make -f /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel: not found 
make[2]: *** [dependencies/SQUIRREL2/squirrel,-prefix/src/squirrel,-stamp/squirrel,-build] Error 127 
make[1]: *** [dependencies/SQUIRREL2/CMakeFiles/squirrel,.dir/all] Error 2 
make: *** [all] Error 2 

LS -lAの/ home /エンリコ/ projekte /プロジェクト名/依存関係を/SQUIRREL2/Makefile.squirrelは、ファイルが存在することを示します。

ファイルパスをハードコーディングする(ソリューションのオプションではありません)も機能しません。

ご意見やご提案はありますか?

おかげで、 エンリコ

答えて

0

あなたは正しいメイクファイルを作る呼び出すスクリプトを書いてみてください。スクリプトが読み込む環境変数にCMAKE_CURRENT_SOURCE_DIRをエクスポートします。

+0

私は非常に同じアイデアが投稿された後数時間でした。 BUILD_COMMANDによって呼び出される別のシェルスクリプトを作成しました。今は動作しますが、ハックのように感じます。残りの依存関係のためにはそれ以上のものが必要です... – Enrico

3

三人の観察:

1)あなたは、プロジェクトの名前として "リスを、" 使用しています。 CMake関数の引数はスペースで区切られているので、カンマはあなたが指定した名前の一部です。 (。おそらくない何をしたい)

2)あなたが使用する必要があります:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" 

ではなく

SOURCE_DIR "./" 

"./" はとにかく単純にそのフルパス名に相対的であるので。

BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 

は、読み込みする必要があります:

BUILD_COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel 

あなたがそこに引用符を持っている場合は、シェルは、実際の探している

3)問題の本当の源はあなたのBUILD_COMMAND値であり、 "make -f .../Makefile.squirrel"という名前のファイルは、CMakeが引数をスペースで解析するので、二重引用符はCMakeに "これはスペースを含む1つの引数です"と伝えます。$の展開された値にスペースがあれば{CMAKE_CURRENT_SOURCE_DIR}その後、CMakeは適切に二重引用符(またはエスケープ、dependin gは、生成されたmakefileにコマンドを生成するときにそれをプラットフォーム/シェル上で実行します)。

関連する問題