4

我有一个带有 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 进行编译。

4

2 回答 2

4

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

于 2013-03-01T17:28:55.697 回答
-1

你可以试试这个:

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

然后设置你的链接库:

target_link_libraries(mybin ${MYLIB})

应该是工作。

于 2014-12-06T13:34:07.553 回答