C++ Cmake外部库

C++ Cmake外部库,c++,makefile,cmake,gnu-make,C++,Makefile,Cmake,Gnu Make,我在这里有一个外部图书馆: ${PROJECT\u SOURCE\u DIR}/thirdparty/yaml cpp/ 它由一个Makefile生成:thirdparty/Makefile。我正在执行makefile,如下所示: add_custom_target( yaml-cpp COMMAND make WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty ) 然后,我尝试链接库,该库构建到thirdparty/yaml-c

我在这里有一个外部图书馆:

${PROJECT\u SOURCE\u 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.

如何执行该makefile并链接
.a
文件?

因此,cmake无法在此处找出依赖项是有意义的:它必须解析makefile并找到输出。你必须把输出告诉别人。据我所知,最好的方法是使用自定义命令而不是自定义目标:

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在尝试链接之前工作并创建了库。

嗨!谢谢你的回答,非常接近!只有一个问题:
make[3]:***没有规则使目标“../bin/load\u balancer\u node”需要“../thirdparty/yaml cpp/build/libyaml cpp.a”。停止。
有什么想法吗?
添加依赖项(负载平衡器节点yaml cpp)
中应该包括这些想法。或者第三方makefile正在另一个位置转储.a…我不确定您正在使用哪个生成器,但如果它只是make,请尝试“make yaml cpp”,并查看.a文件是否在${CMAKE_SOURCE_DIR}/thirdparty/yaml cpp/build/libyaml cpp.a处生成。