17

次のディレクトリ構造があるとしましょう。

root
  |
  +--projects
  |      |
  |      +-test
  |         |
  |         +-CMakeFiles.txt
  |
  +--libs
       |
       +-testlib
            |
            +-CMakeFiles.txt

testを含みCMakeFiles.txttestlibまたを含みますCMakeFiles.txt。「test」は実行可能ファイルを生成し、「testlib」は静的ライブラリを生成します。

シンボリックリンクを使用せず、「testlib」ライブラリを「test」内のサブディレクトリに移動せずに、「test」を「testlib」にリンクさせたい。

「testlib」は「test」のサブディレクトリではないので、できません

add_subdirectory("../../libs/testlib")

テストCMakeFiles.txtでは-CMakeは「testlib」が「test」サブディレクトリにないことについて文句を言います。

また、システムにはいくつかの異なるコンパイラがあるため、「testlib」ライブラリをある種の中央ディレクトリに単純にインストールすることはできません。そのためtest、ローカルコピーをコンパイルしてtestlibリンクします(つまりtestlib、サブディレクトリのように)。また、「test」プロジェクトが変更された場合は、「testlib」を自動的に再構築する必要があります。

それで、どうすればそれに対処できますか?WindowsXPSP3でCMake2.8.4を使用しています。

4

2 に答える 2

21

でトップレベルのCMakeLists.txtを提供するか、コマンドrootにバイナリディレクトリを提供することができます。add_subdirectory例えば

add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build")

これにより、現在のビルドディレクトリに呼び出されるサブディレクトリが作成されます。このサブディレクトリtestlib_buildには、testlib用に生成されたプロジェクトファイルが含まれますが、ソースは含まれません。

詳細については、

cmake --help-command ADD_SUBDIRECTORY
于 2012-04-04T08:52:46.790 に答える
14

これを行うために私が見る唯一の方法-rootで作成CMakeLists.txtし、そこに次のコードを配置します。

add_subdirectory(projects/test)
add_subdirectory(lib/testlib)

これを行ったら、で行うことができますtarget_link_libraries(test testlib)test/CMakeLists.txtで何かを変更すると、自動的に再構築されますtestlib

于 2012-04-04T06:21:28.190 に答える