Cmake внешняя библиотека .a

У меня есть внешняя библиотека здесь:

${PROJECT_SOURCE_DIR}/thirdparty/yaml-cpp/

Это сделано Makefile: thirdparty/Makefile, Я выполняю этот make-файл так:

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.

Как мне выполнить этот make-файл и связать .a файл?

4

Решение

Поэтому имеет смысл, что cmake не может выяснить зависимости здесь: он должен был бы проанализировать make-файл и найти вывод. Вы должны сказать это кому-то на выходе. Насколько я понимаю, лучший способ сделать это — использовать команду 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 работал и создавал библиотеки, прежде чем пытаться связать.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]