私はautogenベースのプロジェクトでCMake ExternalProject_Add
を使用してDebianをビルドしようとしています。プロジェクトは私が設定したプレフィックスディレクトリにインストールされます(デフォルトは/usr/local
)。問題は、プロジェクトでmake package
を実行すると、結果のdebianは/usr/local
の代わりにそのプレフィックスディレクトリを使用することです。私は余分なCMake install()
コマンドを実行しようとしましたが、それでも、プレフィックスディレクトリの場所にターゲット出力の余分なコピーを取得します。私は私が正しいインストールで終わるが、それでも${SPHINXBASE_INSTALLDIR}
でインストールしようと余分なコピーを持っているinstall(DIRECTORY ${SPHINXBASE_INSTALL_DIR} DESTINATION ${CMAKE_PREFIX_PATH})
を追加する場合はここでCPackアウトプット・ロケーションが不適切な外部自動プロジェクト
はフルCMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project("sphinxbase")
find_package(Git REQUIRED)
set(CPACK_GENERATOR "DEB")
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
endif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Chuck Claunch <[email protected]>")
set(CPACK_PACKAGE_VERSION_MAJOR 0)
set(CPACK_PACKAGE_VERSION_MINOR 0)
set(CPACK_PACKAGE_VERSION_PATCH 1)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-list master..
COMMAND wc -l
OUTPUT_VARIABLE GIT_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} VERSION_LESS 2.8.11)
message(STATUS "CMake older than 2.8.11, generating timestamp using execute_process().")
execute_process(COMMAND date -u +%Y.%m.%d.%H.%M.%S
OUTPUT_VARIABLE DATE_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE
)
else(if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} VERSION_LESS 2.8.11))
message(STATUS "CMake newer than 2.8.11, generating timestamp using string(TIMESTAMP).")
string(TIMESTAMP DATE_STRING %Y.%m.%d.%H.%M.%S UTC)
endif(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} VERSION_LESS 2.8.11)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE GIT_SHA_COMPLETE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(SUBSTRING ${GIT_SHA_COMPLETE} 0 8 GIT_SHA_SHORT)
set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${GIT_REVISION}-${DATE_STRING}-${GIT_SHA_SHORT}")
set(CPACK_DEBIAN_PACKAGE_PROVIDES ${PROJECT_NAME})
set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${PROJECT_NAME})
set(CPACK_DEBIAN_PACKAGE_REPLACES ${PROJECT_NAME})
set(CPACK_DEBIAN_PACKAGE_DEPENDS "bison, python-dev, swig")
set(CPACK_DEBIAN_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Sphinx speech recognition libraries")
set(SPHINXBASE_PREFIX_DIR ${CMAKE_BINARY_DIR}/sphinxbase)
set(SPHINXBASE_SRC_DIR ${SPHINXBASE_PREFIX_DIR}/src/libsphinxbase)
set(SPHINXBASE_INSTALL_DIR ${SPHINXBASE_PREFIX_DIR}/install)
include(ExternalProject)
ExternalProject_Add(libsphinxbase
GIT_REPOSITORY https://github.com/cmusphinx/sphinxbase
GIT_TAG master
PREFIX ${SPHINXBASE_PREFIX_DIR}
DESTDIR ${CMAKE_PREFIX_PATH}
CONFIGURE_COMMAND cd ${SPHINXBASE_SRC_DIR} && ./autogen.sh && ./configure --prefix=${SPHINXBASE_INSTALL_DIR}
BUILD_IN_SOURCE 1
)
add_custom_target(libsphinxbase-build
DEPENDS libsphinxbase)
set(CPACK_PACKAGE_FILE_NAME ${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
include(CPack)
です。私がExternalProject_Add
にPREFIX
のないsudoとしてビルドを実行するとうまく動作しますが、ビルドをsudoとして実行したくありません。
私はCPackを${SPHINXBASE_INSTALL_DIR}
にして、それをインストールする方法はありますか?${CMAKE_PREFIX_PATH}
?