CMakeスクリプトでは、システムにファイルがあるかどうかを確認し、ファイルがある場合はそれを使用して、それ以外の場合はデフォルトファイルで何かを実行します。コードは次のとおりです。
find_file(
${project_name}_${customer}_config
${ROOT}/configuration/${customer}/configuration.${project_name}.xml
)
if(NOT ${${project_name}_${customer}_config} STREQUAL
${project_name}_${customer}_config-NOTFOUND )
configure_file(${ROOT}/configuration/${customer}/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
else()
configure_file(${FAPP_ROOT}/configuration/Default/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
endif()
しかし、これは機能していないようです。
CMakeにファイルが存在するかどうかを確認する適切な方法は何ですか?
ファイルへのフルパス名がすでにわかっている場合、ファイルが存在するかどうかを確認する適切な方法は次のとおりです。
if(EXISTS "${ROOT}/configuration/${customer}/configuration.${project_name}.xml")
...
else()
...
endif()
あなたはただ使用できるはずです
_if(NOT ${project_name}_${customer}_config)
_
docs から:
if(<constant>)
定数が1、ON、YES、TRUE、Y、またはゼロ以外の数値の場合はTrue。定数が0、OFF、NO、FALSE、N、IGNORE、 ""、またはサフィックス '-NOTFOUND'で終わる場合はFalse。
ただし、ファイルが _find_file
_ を使用して検出された場合、値はキャッシュされ、CMakeの後続の実行はもう一度見つけようとしないでください。 _find_file
_呼び出しの前に実行ごとに再チェックを強制するには:
_unset(${project_name}_${customer}_config CACHE)
_
if (EXISTS <path>)
は良い解決策だと思います。おそらくほとんどの場合、このシナリオは気にしないでしょうが、最近遭遇したシナリオを共有したいと思います。
有効なユーザーがファイルにアクセスできない場合、このソリューションはtrueを返さないことに注意してください。ファイルは存在しますが、読み取り不能です。
ファイルが実際に存在するかどうかを気にする場合、このシナリオの回避策は、execute_process(COMMAND ls /dev/fb0 RESULT_VARIABLE result OUTPUT_QUIET ERROR_QUIET)
を呼び出して、次のようにresult
をチェックすることです。
if (result)
message("/dev/fb0 doesn't exist.")
endif()
編集:ERROR_QUIET
にexecute_process
を追加します。ファイルが存在しない場合、lsからエラーメッセージが表示されます。