2017-02-16 82 views
0

我想在cmake中使用mustache作为简单的模板引擎来生成代码。在cmake中执行小胡子(作为ruby脚本)execute_process

我试着用execute_process执行它如下:

execute_process(COMMAND "/path/to/mustache" "<data> <template>") 

但它表示,它不是有效的Win32应用程序。事实上,胡子是一个Ruby脚本:

#!D:/programs/Ruby23/bin/ruby.exe 
# 
# This file was generated by RubyGems. 
# 
# The application 'mustache' is installed as part of a gem, and 
# this file is here to facilitate running it. 
# 

require 'rubygems' 

version = ">= 0.a" 

if ARGV.first 

    ... 

所以,我想:

execute_process(COMMAMD "/path/to/ruby" "/path/to/mustache --help") 

但它不工作要么... No such file or directory -- D:/programs/Ruby23/bin/mustache --help (LoadError)

如何执行的CMake Ruby脚本execute_process?

+0

'但它不工作,要么...' - 它说,红宝石是不是WIN32应用程序呢?或者是什么? – Tsyvarev

+0

没有这样的文件或目录 - D:/ programs/Ruby23/bin/mustache --help(LoadError) – jvtrudel

+0

ok。这些提示必须作为列表传递......''''execute_process(COMMAMD“/ path/to/ruby​​”“/ path/to/mustache”“--help”)''''谢谢你的提示。 – jvtrudel

回答

1

execute_process(COMMAND < CMD1> [args1 ...]] ...)

参数必须尽可能列表传递,而不是字符串。

# path to executables 
    set(RUBY_EXECUTABLE D:/programs/Ruby23/bin/ruby.exe CACHE STRING "ruby executable") 
    set(MUSTACHE_SCRIPT D:/programs/Ruby23/bin/mustache CACHE STRING "mustache ruby script") 

    # function that call mustache 
    function(apply_mustache data template result) 
     execute_process(
      COMMAND ${RUBY_EXECUTABLE} -E UTF-8 ${MUSTACHE_SCRIPT} ${data} ${template} 
      OUTPUT_VARIABLE result_t 
      ) 
     set(${result} ${result_t} PARENT_SCOPE) 
    endfunction() 

奖金-E UTF-8防止红宝石乱用UTF-8字符...