web-dev-qa-db-ja.com

cmakeでライブラリパスを追加するにはどうすればよいですか?

私のプロジェクトには2つのフォルダー「inc」と「lib」があり、それぞれヘッダーと静的ライブラリーがあります。これら2つのディレクトリをそれぞれインクルードとリンクに使用するようにcmakeに指示するにはどうすればよいですか?

38
grasevski

これを行う最も簡単な方法は、追加することです

include_directories(${CMAKE_SOURCE_DIR}/inc)
link_directories(${CMAKE_SOURCE_DIR}/lib)

add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # libbar.so is found in ${CMAKE_SOURCE_DIR}/lib

すべてのコンパイラー呼び出しに-I and -Lフラグを追加しない最新のCMakeバージョンでは、インポートされたライブラリーを使用します。

add_library(bar SHARED IMPORTED) # or STATIC instead of SHARED
set_target_properties(bar PROPERTIES
  IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/lib/libbar.so"
  INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include/libbar"
)

set(FOO_SRCS "foo.cpp")
add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # also adds the required include path

INTERFACE_INCLUDE_DIRECTORIESを設定してもパスが追加されない場合、CMakeの古いバージョンでもtarget_include_directories(bar PUBLIC /path/to/include)を使用できます。ただし、CMake 3.6以降では、これは 動作しなくなりました です。

62
ar31