web-dev-qa-db-ja.com

cmake execute_process()は、gitを呼び出すと常に「そのようなファイルまたはディレクトリはありません」で失敗します

Linuxマシンでは、cmakeプロジェクトから、execute_processを使用してgitを呼び出し、ソースコントロールからの情報をアプリに含めることができるようにしています。

私はgitバージョンを試して印刷するための小さなテストを作成しました:

cmake_minimum_required (VERSION 2.8)

set (git_cmd "/usr/bin/git --version")
#set (git_cmd "ls") # returns success if you uncomment this line 
message(STATUS "git cmd: ${git_cmd}")
execute_process(COMMAND ${git_cmd}
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  RESULT_VARIABLE git_result
  OUTPUT_VARIABLE git_ver)

message(STATUS "git ver[${git_result}]: ${git_ver}")

configure_file (
  "${PROJECT_SOURCE_DIR}/versionInfo.h.in"
  "${PROJECT_BINARY_DIR}/versionInfo.h"
  )

Makeを実行すると、次の出力が得られます。

-- git cmd: /usr/bin/git --version
-- git ver[No such file or directory]: 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rsanderson/build/githash: 

しかし、コマンドをlsに変更すると、結果は有効になり、dirリストの出力が表示されます。そのgitが実際に/ usr/binにあるかどうかも確認しました。

ここで私が見逃していることについてのアイデアはありますか?

25
Rian Sanderson

次のように、2番目のオプションとして引数を渡す必要があります。

cmake_minimum_required (VERSION 2.8)

set (git_cmd "git")
set (git_arg "--version")
message(STATUS "git cmd: ${git_cmd}")
execute_process(COMMAND ${git_cmd} ${git_arg}
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  RESULT_VARIABLE git_result
  OUTPUT_VARIABLE git_ver)

message(STATUS "git ver[${git_result}]: ${git_ver}")
55
Unapiedra