2017-06-23 11 views
0

私は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_AddPREFIXのないsudoとしてビルドを実行するとうまく動作しますが、ビルドをsudoとして実行したくありません。

私はCPackを${SPHINXBASE_INSTALL_DIR}にして、それをインストールする方法はありますか?${CMAKE_PREFIX_PATH}

答えて

0

今日は同じ問題がありました。実際に、makeパッケージを実行すると、make install部分を含めてcmakeが実行されます。これは望ましくありません。 "cpack"はコマンドラインでのみ試してください。パッケージを直接ビルドします。

することもできません:DESTDIR =/tmpに/チュックメイクパッケージmake installを行い

メイクパッケージ最初の実行cmakeの。 cpackまず、インストールプレフィックスを一時ディレクトリに設定し、make install afterを実行します。