web-dev-qa-db-ja.com

ソースディレクトリの静的ライブラリにリンクするようにCMakeに指示するにはどうすればよいですか?

私は、主にCMakeの経験を得るためだけに、CMakeに変換しようとしているMakefileを持つ小さなプロジェクトを持っています。この例の目的のために、プロジェクトにはソースファイル(C++、言語は特に関係ないと思います)と、他の場所からコピーした静的ライブラリファイルが含まれています。議論のために、ライブラリのソースコードが利用できないと仮定します。 .aファイルと対応するヘッダーのみがあります。

私の手作りのMakefileには次のビルドルールが含まれています。

main: main.o libbingitup.a
    g++ -o main main.o libbingitup.a

正常に動作します。これを再現するようにCMakeに指示するにはどうすればよいですか?もちろん、この正確なメイクファイルではなく、同等のリンクコマンドを含むものです。私は明らかですが、素朴な方法を試しました、例えば

add_executable(main main.cpp libbingitup.a)

または

add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)

link_directories(.)add_library(bingitup STATIC IMPORTED)などのさまざまなものがありますが、これまでのところ、リンクが成功することはありません。私は何をすべきですか?


バージョンの詳細:Linux上のCMake 2.8.7(Kubuntu 12.04)とGCC 4.6.3

67
David Z

CMakeは、リンクライブラリへのフルパスを渡すことを好みます。したがって、libbingitup.aが${CMAKE_SOURCE_DIR}にあると仮定すると、次の操作が成功するはずです。

add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)
93
Fraser

フルパスを含めたくない場合は、次のようにします

add_executable(main main.cpp)
target_link_libraries(main bingitup)

bingitupは、CMakeプロジェクトで静的ライブラリを作成する場合にターゲットに付ける名前と同じです。

add_library(bingitup STATIC bingitup.cpp)

CMakeは、lib.aをLinuxの先頭に自動的に追加し、.libをWindowsの最後に追加します。

ライブラリが外部の場合、次を使用してライブラリへのパスを追加できます。

link_directories(/path/to/libraries/)
19
Cris Luengo

これは役に立ちました...

http://www.cmake.org/pipermail/cmake/2011-June/045222.html

彼らの例から:

ADD_LIBRARY(boost_unit_test_framework STATIC IMPORTED)
SET_TARGET_PROPERTIES(boost_unit_test_framework PROPERTIES IMPORTED_LOCATION /usr/lib/libboost_unit_test_framework.a)
TARGET_LINK_LIBRARIES(mytarget A boost_unit_test_framework C)
18
stu