CMake:链接到具有依赖项的导入库失败

时间:2013-03-01 14:31:56

标签: cmake

我有一个带有CMakeLists.txt的子目录,它应该使用make编译一个库,并将结果作为导入的库导出到父目录:

set(static_lib ${CMAKE_CURRENT_BINARY_DIR}/lib/mylib.a)

add_custom_command(
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    OUTPUT ${static_lib}
    COMMAND make
    COMMAND make install PREFIX=${CMAKE_CURRENT_BINARY_DIR}
)

add_custom_target(compile_mylib DEPENDS ${static_lib})

add_library(mylib STATIC IMPORTED)
set_property(TARGET mylib PROPERTY IMPORTED_LOCATION ${static_lib})
add_dependencies(mylib compile_mylib)

父目录中的CMakeLists.txt如下所示:

add_subdirectory(deps/mylib)
add_executable(mybin source.c)
target_link_libraries(mybin mylib)

在OSX上这很好用 - 但如果我在Ubuntu上编译相同它似乎忽​​略了子目录的CMakeLists并抱怨:

/usr/bin/ld.bfd.real: cannot find -lmylib

我正在使用Clang进行编译。

2 个答案:

答案 0 :(得分:3)

解决方案是将GLOBAL添加到您的add_library调用中,以便它对父CMakeLists.txt可见

答案 1 :(得分:-1)

你可以试试这个:

find_library(MYLIB mylib.a ${CMAKE_CURRENT_BINARY_DIR}/lib)

然后设置你的链接库:

target_link_libraries(mybin ${MYLIB})

应该工作。