正確に何が機能していないのかわかりません。
これは、WindowsのZIPジェネレーターで私にとってうまくいくものです。これがTGZでも機能するかどうかを確認するために、Linuxマシンを見つけようとします(編集:機能します):
ディレクトリ構造:
CMakeLists.txt
ProjectA/
doc
foo.txt
include
foo.h
test
foo.test
ProjectB/
doc
bar.txt
include
bar.h
test
bar.test
ProjectA/CMakeLists.txt
project( ProjectA )
INSTALL( DIRECTORY include DESTINATION . )
INSTALL( DIRECTORY doc DESTINATION ${PROJECT_NAME}/ )
INSTALL( DIRECTORY test DESTINATION ${PROJECT_NAME}/ )
ProjectB/CMakeLists.txt
project( ProjectB )
INSTALL( DIRECTORY include DESTINATION . )
INSTALL( DIRECTORY doc DESTINATION ${PROJECT_NAME}/ )
INSTALL( DIRECTORY test DESTINATION ${PROJECT_NAME}/ )
CMakeLists.txt:
project( MyProject )
ADD_SUBDIRECTORY(ProjectA)
ADD_SUBDIRECTORY(ProjectB)
INCLUDE(CPack)
パッケージを作成すると、
MyProject-0.1.1-win32.zip
MyProject-0.1.1-win32
include
bar.h
foo.h
ProjectA
doc
foo.txt
test
foo.test
ProjectB
doc
bar.txt
test
bar.test
それはあなたが意図したものですか?
ソース パッケージ
ソース パッケージの作成では、CPack はデフォルトでインストール コマンドを無視し、 で指定されたすべてのディレクトリをインストール/コピーしますCPACK_SOURCE_INSTALLED_DIRECTORIES
。この変数には、ソース ディレクトリと宛先ディレクトリのペアが含まれます。"${CMAKE_SOURCE_DIR};/"
手動で設定しない場合はデフォルトです。正確には、これらのディレクトリをグロブし、CPACK_SOURCE_IGNORE_FILES
デフォルトですべての主要な VCS ブックキーピング ファイルが設定されているすべてのファイルを無視します (CPackSourceConfig.cmake
例を参照)。
次のことができます。
CMakeLists.txt
project( MyProject )
SET( PROJECTS ProjectA ProjectB )
SET(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR};/")
FOREACH( p ${PROJECTS} )
ADD_SUBDIRECTORY( ${p} )
LIST( APPEND CPACK_SOURCE_INSTALLED_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR/${p}/include include )
ENDFOREACH()
INCLUDE(CPack)
またはCPACK_SOURCE_INSTALLED_DIRECTORIES
、それぞれのプロジェクト ファイルに操作を追加します。
ただし: これにより、インクルード ディレクトリが最上位のインクルード ディレクトリにインストールされますが、グロビングのためにプロジェクト ディレクトリ内に別のコピーが作成されます。おそらく、doc
とディレクトリ用に追加のディレクトリ ペアを作成し、コマンドtest
での の初期化をスキップできます。これを行う場合、プロジェクト固有の CMake ファイルをインストール/コピーする方法を見つける必要があります。CPACK_SOURCE_INSTALLED_DIRECTORIES
SET
大きな警告ProjectA
: プロジェクト ローカルのインクルード ディレクトリをProjectB
参照する場合(たとえばINCLUDE_DIRECTORIES(...)
、CMake コードを壊して、ソースのインストールを (部分的に) 役に立たなくすることになります。そのため、最上位のインクルード ディレクトリの考えを再考することをお勧めします。