4

ここに外部ライブラリがあります:

${PROJECT_SOURCE_DIR}/thirdparty/yaml-cpp/

これは Makefile: によって作成されますthirdparty/Makefile。私はそのmakefileを次のように実行しています:

add_custom_target(
   yaml-cpp
   COMMAND make
   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty
)

次に、ビルドするライブラリをリンクしようとしていますthirdparty/yaml-cpp/build/libyaml-cpp.aこれは機能していない部分です:

target_link_libraries(load_balancer_node ${CMAKE_SOURCE_DIR}/thirdparty/yaml-cpp/build/libyaml-cpp.a)

エラーが発生します:

  Target "yaml-cpp" of type UTILITY may not be linked into another target.
  One may link only to STATIC or SHARED libraries, or to executables with the
  ENABLE_EXPORTS property set.

そのメイクファイルを実行してファイルをリンクするにはどうすればよい.aですか?

4

1 に答える 1

4

したがって、ここで cmake が依存関係を把握できないのは理にかなっています。makefile を解析して出力を見つける必要があります。誰かに出力を伝える必要があります。私が理解できる最も近い方法は、カスタム ターゲットではなく custom_command を使用することです。

add_custom_command(
    OUTPUT ${CMAKE_SOURCE_DIR}/thirdparty/yaml-cpp/build/libyaml-cpp.a
    COMMAND make
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty)
 add_custom_target(
   yaml-cpp
   DEPENDS ${CMAKE_SOURCE_DIR}/thirdparty/yaml-cpp/build/libyaml-cpp.a)
 ...
 add_dependencies(load_balancer_node yaml-cpp)
 target_link_libraries(load_balancer_node ${CMAKE_SOURCE_DIR}/thirdparty/yaml-cpp/build/libyaml-cpp.a)

私はリンカーの問題を抱えていましたが(愚かなWindowsマシン)、リンクを試みる前にcmakeが機能し、ライブラリを作成しました。

于 2013-07-25T19:08:49.820 に答える