5

私たちのプロジェクトでは、autotools を使用してビルドされ、ライブラリ (C) の 1 つのリンク時に必要なオブジェクト ファイル (B) を生成するサードパーティ ライブラリ (A) を使用したいと考えています。

external_project(
    A
    ...
)
set_source_files_properties(B PROPERTIES DEPEND A)
add_library(C ... A)
add_dependency(C B)

これでうまくいくはずだという印象を受けましたが、cmake コマンドは、add_library のチェック中にファイル A が見つからないことを示して失敗します。

修正または代替ソリューションをいただければ幸いです。(サードパーティのライブラリを変更することはできません) ありがとう!

4

1 に答える 1

3

ここにはいくつかの問題があります。

  • external_projectする必要がありますExternalProject_Add
  • ソースファイルには、DEPENDavailableと呼ばれるプロパティはありません。このset_source_files_propertiesコマンドはここでは効果がありません。(ソースファイルで利用可能なプロパティは次のとおりです)
  • add_library別のCMakeターゲットではなく、ソースファイルのリストが渡されることを期待します(これAは)
  • add_dependencyする必要がありますadd_dependencies

これらの4行を除けば、すべて大丈夫です:-)

Bしたがって、問題は、オブジェクトファイルを呼び出しに含めたいということですがadd_library、構成時(CMakeが呼び出されたとき)には使用できず、ビルド時にのみ使用できます。

私はあなたが次のようなことをしなければならないと思います:

ExternalProject_Add(
    A
    ...
)

set_source_files_properties(
    ${B} PROPERTIES
    EXTERNAL_OBJECT TRUE  # Identifies this as an object file
    GENERATED TRUE  # Avoids need for file to exist at configure-time
)

add_library(C ... ${B})
于 2013-03-14T23:10:58.960 に答える