1

リポジトリにいくつかの依存関係ライブラリがあります。主要部分はcmakeで構築されています。これで、cmake-makefilesは、cmakeビルドシステムを持たない依存関係ライブラリをビルドします。ある特定のライブラリには、使用する必要のある「Makefile.squirrel」があります。そのライブラリのcmakelists.txt:

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

/home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrelのls- lAは、ファイルが存在することを示しています。

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

アイデアやヒントはありますか?

4

2 に答える 2

3

3つの観察:

1)プロジェクトの名前として「リス」を使用しています。CMake関数の引数はスペースで区切られているため、コンマは指定した名前の一部です。(おそらくあなたが望むものではありません。)

2)次を使用する必要があります:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"

それよりも

SOURCE_DIR "./"

「./」はとにかくそのフルパス名に単に相対的だからです。

3)問題の本当の原因は、BUILD_COMMAND値です。

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

それは読むべきです:

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

そこに引用符がある場合、CMakeは引数をスペースで解析するため、シェルは「make -f ... / Makefile.squirrel」という名前の実際のファイルを探しますが、二重引用符はCMakeに「これは正確に1つの引数です。スペース..."${CMAKE_CURRENT_SOURCE_DIR}の展開値にスペースがある場合、CMakeは、生成されたmakefileでコマンドを生成するときに、適切に二重引用符で囲みます(または、プラットフォーム/シェルによってはエスケープします)。

于 2011-02-17T04:57:02.537 に答える
0

正しい makefile を使用して make を呼び出すスクリプトを作成してみてください。スクリプトが読み取る環境変数に CMAKE_CURRENT_SOURCE_DIR をエクスポートするだけです。

于 2010-12-30T18:52:33.340 に答える