17

CMake を使用してプロジェクトを共有ライブラリにリンクしたいと考えています。ライブラリは少数のプロジェクト間でのみ共有されており、かなり小さいので、リンクする前にビルドしたいと思っています。プロジェクトと一緒に変更する必要があるため、最新のプリコンパイル済みバージョンを維持するよりも、毎回ビルドする方が良いと思われます。次のプロジェクトでほぼ確実に必要になるものが含まれているため、別のものです。

それを行うようにCMakeを構成するにはどうすればよいですか?

関連するプロジェクトの現在の CMakeLists.txt は次のようになります。

find_package( Boost REQUIRED COMPONENTS unit_test_framework)

include_directories(${BaumWelch_SOURCE_DIR}/../../grzesLib/src
                    ${BaumWelch_SOURCE_DIR}/src 
                    ${Boost_INCLUDE_DIRS})

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-g -std=c++11 -Wall -Werror -Wextra -pedantic -Wuninitialized)
endif()


# Create the unit tests executable
add_executable(
 baumwelchtests stateindextest.cpp baumiterationtest.cpp baumwelchtest.cpp sampleparameters.cpp sdetest.cpp
 # Key includes for setting up Boost.Test
 testrunner.cpp
 # Just for handy reference
 exampletests.cpp
)

# Link the libraries
target_link_libraries( baumwelchtests ${Boost_LIBRARIES} baumwelchlib grzeslib)

しかし、明らかにコンパイルは次のように失敗します:

/usr/bin/ld: cannot find -lgrzeslib
4

1 に答える 1

29

プリコンパイルされたバージョンを使用するのではなく、ライブラリをビルドしたいとおっしゃいました。ライブラリに CMakeList がある場合は、 を使用して追加する必要がありますadd_subdirectory(path/to/the/library/source/directory)。その後、プロジェクトのサブプロジェクトになり、CMakeList で通常どおりターゲットの名前を使用できます。

このコマンドは add_ subdirectoryと呼ばれますが、ディスク上の任意のディレクトリを指定できることに注意してください。マスター プロジェクトのソース ディレクトリのサブディレクトリである必要はありません。サブディレクトリでない場合は、バイナリ ディレクトリも明示的に指定する必要があります。例:

add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib)

相対パスとして指定された場合、2 番目の引数は に対して相対的に解釈されCMAKE_CURRENT_BINARY_DIRます。

于 2013-03-22T12:20:01.190 に答える