2016-12-29 6 views
2

ビルドプロセスの一環として、Webサーバーlighttpdをビルドしています。外部プロジェクトからコピーしたファイルを消去する

CMakeLists.txt

以下が動作している:

include(ExternalProject) 

ExternalProject_Add(
    lighttpd 
    URL ${PROJECT_SOURCE_DIR}/ext/lighttpd.tar.gz 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_OUTPUT_PATH}/lighttpd 
) 

ExternalProject_Add_Step(
    lighttpd copy2bin 
    COMMAND ${CMAKE_COMMAND} -E copy_directory ${EXTERNAL_OUTPUT_PATH}/lighttpd/sbin ${EXECUTABLE_OUTPUT_PATH} 
    COMMAND ${CMAKE_COMMAND} -E copy_directory ${EXTERNAL_OUTPUT_PATH}/lighttpd/lib/lighttpd ${LIBRARY_OUTPUT_PATH} 
    DEPENDEES install 
) 

Iはmakeを入力するcopy2binステップで行われるように、得られたバイナリとライブラリは、それぞれbin/lib/です。ただし、make cleanと入力するとファイルが消去されません。

cleanを呼び出すときに、bin/lib/ lighttpdファイルをクリアするようにCMakeに通知するにはどうすればよいですか?

私はこれを行うことができるより良い方法はありますか?私はGitHubで見つけたものを基本的にモデル化しました。

これは私のトップレベルのCMakeListsです:

# Specify the minimum version for CMake 
cmake_minimum_required(VERSION 3.5) 

# Project's name 
project(CMakeTest) 

# Set the output folder where your program will be created 
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) 
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) 
set(EXTERNAL_OUTPUT_PATH ${CMAKE_BINARY_DIR}/ext_install) 

add_subdirectory(ext) #Contains CMakeLists above 

編集:ADDITIONAL_MAKE_CLEAN_FILES

set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 
    "${EXTERNAL_OUTPUT_PATH}" 
    "${EXECUTABLE_OUTPUT_PATH}/lighttpd" 
    "${EXECUTABLE_OUTPUT_PATH}/lighttpd-angel" 
) 

答えて

1

set_directory_propertiesが中にきれいにファイルを追加することができます:私はそれが作業得ることができた

クリーンクリーンステージ:

set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${EXECUTABLE_OUTPUT_PATH}") 
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LIBRARY_OUTPUT_PATH}") 

Iは、その署名set_directory_propertiesに別のコールを使用する:

set_directory_properties(PROPERTIES prop1 value1 prop2 value2) 

これは一つの値だけを持つプロパティを関連付けることができます。オールインワンソリューションは、次のようになります。

set_directory_properties(PROPERTIES 
    ADDITIONAL_MAKE_CLEAN_FILES "${EXECUTABLE_OUTPUT_PATH}" 
    ADDITIONAL_MAKE_CLEAN_FILES "${LIBRARY_OUTPUT_PATH}" 
) 

私は同じコールでADDITIONAL_MAKE_CLEAN_FILES繰り返しを好きではありません。また、あなたはset_propertyを使用することができます。

set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 
    "${EXECUTABLE_OUTPUT_PATH}" 
    "${LIBRARY_OUTPUT_PATH}" 
) 

注:

パスに変数を使用するときは、必ず引用符""間のパスを記述する必要があります:変数に空白文字が含まれている場合結果として得られるパスは、値のリストと見なすことができます。

set(EXECUTABLE_OUTPUT_PATH "/path/with a/space") 
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 
    ${EXECUTABLE_OUTPUT_PATH} 
) 

ここで

set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 
    /path/with a/space 
) 

プロパティが望んでいたように、パス/path/with a/spaceに適用されますが、パス/path/witha/spaceにされることはありません。次のように引用符BOVE、${EXECUTABLE_OUTPUT_PATH}は解釈されます。

+0

私はこれを試しましたが、 'make clean 'や' ninja clean'の後でさえ、 'lighttpd'が' $ {EXECUTABLE_OUTPUT_PATH} 'の中にまだ表示されています – RPGillespie

+0

' $ {LIBRARY_OUTPUT_PATH}あなたの質問を編集し、 'bin /'と 'lib /'の正確な内容を追加してください – wasthishelpful

+0

いいえ、lighttpdファイルは 'bin /'や 'lib /'から消去されませんでした。私はいくつかの文脈を与えるために私の質問を更新しました – RPGillespie

関連する問題