4

make を使用してライブラリをコンパイルし、結果をインポートされたライブラリとして親ディレクトリにエクスポートする CMakeLists.txt を含むサブディレクトリがあります。

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

解決策は、add_library 呼び出しに GLOBAL を追加して、親 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 に答える