質問: 現在、ProjucerとCLionを使って開発しています。 Projucerとは、ソースファイルを様々な環境でビルドできるようにIDE用のプロジェクトファイルを生成してくれるツールです。 また、必要なライブラリを指定すると、プロジェクトファイルにも設定されるようになります。 ProjucerでCLion用にプロジェクトファイルを生成すると、CMakeLists.txtが自動生成されます。 問題 -- 自作のスタティックライブラリをリンクしようとしたのですが、上手くいきませんでした。 CMakeLists.txt中身をみると、`target_link_libraries(proj PRIVATE -L[追加したライブラリ...])`といった形式でライブラリが追加されていました。 そこで、ライブラリを使っている部分だけを切り出し、別プロジェクトで試したところ、 絶対パスを指定した場合のみリンクができました。 ``` #/lib/lib.aをリンクしたい(/libの中身はlib.aのみ) #これはリンクできる target_link_libraries(proj PRIVATE "/lib/lib.a") #ディレクトリパスだとリンクができない target_link_libraries(proj PRIVATE "-L/lib") ``` スタティックライブラリのCMakeは以下の通りです。 ``` cmake_minimum_required(VERSION 3.9) project(libproj) set(CMAKE_CXX_STANDARD 14) add_library(libproj STATIC lib.cpp) ``` 質問 -- Projucerで何度も設定を変更する可能性があるため、変更を適用するたびに自動生成されるCMakeLists.txtを手動で編集することは避けたいです。 そこで、**`target_link_libraries`を使って`-L`オプションを指定する**という条件を満たした上で、ライブラリをリンクするにはどうすればよいでしょうか?
回答: こんにちは。 CMakeのtarget_link_librariesの`A link flag`を見ると、`-`で始まるitemはリンカ用のフラグとして取り扱うようですね。 CLionを使ったことはないのですが、これは gcc に対応しているようですね。 さて、gccの`-L`オプションは指定したライブラリを探すフォルダを指定します。 そして、実際にリンクするライブラリを`-l`オプションで指定します。 この後者の指定がないとリンクされません。 やったことはないですが、特定のフォルダ配下のライブラリを全てリンクしたい場合は、CMakeのfileコマンドの GLOB を使えばリンクするライブラリのリストを生成できますので、それをtarget_link_librariesに渡すことで可能とは思います。 これを Projucer 経由でできるのか?は分かりませんが、CMakeのfind_packageコマンドを呼ばせることが可能なら、恐らくできると思います。(findコマンド用のCMakeスクリプトを作って、その中でfileでリストするイメージです。多くのfind_packageコマンド用のCMakeスクリプトは何らかの方法でリンクするライブラリのリストを出力していますし。)