2017-03-14 9 views
0

generated.hは、今のところtouchに置き換えられたスクリプトによって作成されます。 makeを実行するたびにこのファイルが再生成されることをどのように達成できますか?下の例のようにrmを呼び出すと、エラーが発生します。代わりにadd_custom_command使用add_custom_targetcmake:各ビルドでファイルを再生成

cmake_minimum_required(VERSION 3.5.1) 
project(MyProject) 

set_source_files_properties(generated.h PROPERTIES GENERATED TRUE) 

add_executable(jr 
    jr.cpp 
    generated.h 
    ) 

add_custom_command(
     OUTPUT generated.h 
     COMMAND rm generated.h 
     COMMAND touch generated.h 
     ) 
+0

:それは、ビルドが実行されるたびに実行されます。 – Tsyvarev

+0

変更を加えると、ファイルは生成されません。 – robert

+0

ええと、あなたは試してみましたか? 'add_custom_target(regenerate COMMAND touch generated.h)'、 'add_dependencies(jr regenerate)'? 'touch 'の前にファイルを削除したい場合は、' COMMAND rm -f generated.h'を使います。 – Tsyvarev

答えて

1

:それは毎回ビルドを実行されますが実行されます。代わりに `add_custom_command`使用` add_custom_target`の

add_custom_target(regenerate 
    COMMAND rm -f generated.h # Remove file if it exists. 
    COMMAND touch generated.h 
) 

# Force executable to be compiled after regeneration takes a place 
add_dependencies(jr regenerate) 

# You need to hint compiler about location of the header file generated. 
include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
関連する問題