1. ホーム
  2. cmake

[解決済み] CMakeにソースディレクトリにある静的ライブラリをリンクするように指示するにはどうすればよいですか?

2022-03-16 09:07:03

質問

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

私のハンドメイドのMakefileには、このようなビルドルールが含まれています。

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

というのがありますが、これは問題なく動作します。CMakeにこれを再現するように指示するにはどうしたらいいでしょうか?もちろん、文字通りこの正確なmakefileではなく、同等のリンクコマンドを含む何かです。私は明白な、しかし素朴な方法を試してみました、例えば

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 (Kubuntu 12.04) と GCC 4.6.3 上での CMake 2.8.7

解決方法は?

CMake はライブラリをリンクするためにフルパスを渡すことを好むので、libbingitup.a が以下の場所にあると仮定します。 ${CMAKE_SOURCE_DIR} を実行すると成功するはずです。

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