我有一个带有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进行编译。
答案 0 :(得分:3)
解决方案是将GLOBAL添加到您的add_library调用中,以便它对父CMakeLists.txt可见
答案 1 :(得分:-1)
你可以试试这个:
find_library(MYLIB mylib.a ${CMAKE_CURRENT_BINARY_DIR}/lib)
然后设置你的链接库:
target_link_libraries(mybin ${MYLIB})
应该工作。