首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串正则表达式替换需要6 args but..MinGW、CMake、w7

字符串正则表达式替换需要6 args but..MinGW、CMake、w7
EN

Stack Overflow用户
提问于 2014-01-10 12:40:47
回答 2查看 7K关注 0票数 3

我试图在w7中构建一个应用程序,在CentOS 6.5上使用,没有问题,但我需要为CentOS 32位和64位进行编译。这个程序使用RTi库,但是Win库是为VS2010开发的,我将使用MinGW Gcc 4.x.x、CMake 2.8.12和Maven 3.02构建。我纠正了一些数据类型不兼容的问题,但我认为MinGW和Windows7之间的斜杠和正斜杠可能存在一些问题。基类程序编译成功,现在是二进制程序的时候了。当我执行cmake -G "MinGW Makefiles“表达式时,我会得到以下错误。

代码语言:javascript
复制
CMake Error at C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:43 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:116 (RemoveCXXComments)
  C:/Workspace/trunk/IB/src/make/IB.DDS.cmake:12 (HasInterfaces)
  C:/Workspace/trunk/IB/src/make/IB.DDS.cmake:59 (GetDDSGeneratedFiles)
  CMakeLists.txt:6 (GenerateIDLLibrary)


 CMake Error at C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:43 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:65 (RemoveCXXComments)
  C:/Workspace/trunk/IB/src/make/IB.DDS.cmake:74 (FindIncludes)
  CMakeLists.txt:6 (GenerateIDLLibrary)


Includes for 'C:/MinGW/msys/1.0/home/blcoalla/trunk/Example/TestProfiles/TestPayload.idl'        are
CMake Error at C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:43 (string):
  string sub-command REGEX, mode REPLACE needs at least 6 arguments total to
  command.
Call Stack (most recent call first):
  C:/Workspace/trunk/IB/src/make/IB.Utils.cmake:65 (RemoveCXXComments)
  C:/Workspace/trunk/IB/src/make/IB.DDS.cmake:111 (FindIncludes)
  CMakeLists.txt:6 (GenerateIDLLibrary)

以下是utils.cmake的摘录:

代码语言:javascript
复制
Macro to get the content of a file

-----------------------------------------------------------------

宏(GetFileContent OutFile)

代码语言:javascript
复制
  #message("Called GetFileContent '${ARGN}'")
  SET(cat_prog cat)
  IF(WIN32)
    IF(NOT UNIX)
      SET(cat_prog type)
    ELSE(NOT UNIX)
      message (FATAL_ERROR "cannot determine the system to call to proper 'cat/type'     method")
    ENDIF(NOT UNIX)
  ENDIF(WIN32)

  set (Out)
  set (tmp)

  foreach(gfcfile ${ARGN})

    if (NOT EXISTS ${gfcfile})
      message(FATAL_ERROR "Cannot find file '${gfcfile}'")
    endif(NOT EXISTS ${gfcfile})

    EXECUTE_PROCESS(COMMAND ${cat_prog} ${gfcfile}
                    OUTPUT_VARIABLE tmp)
    set (Out ${Out} ${tmp})

  endforeach(gfcfile ${ARGN})

  set(${OutFile} ${Out})
  #message("Leaving GetFileContent")

endmacro(GetFileContent)
#-----------------------------------------------------------------

# Macro to get includes from an IDL file
#-----------------------------------------------------------------
macro (RemoveCXXComments Output Input)

  #message("RemoveCXXComments Input: '${Input}'")
  # Remove single line comments
  string(REGEX REPLACE "(//[^\n]*\n)" "" ${Output} ${Input})
  #message("RemoveCXXComments without single line: '${${Output}}'")

  # Remove several line comments in file
  string(REGEX REPLACE "(/\\*([^*]|[\r\n]|(\\*+([^*/]|[\r\n])))*\\*+/)" "" FileContent         ${FileContent})
  #message("RemoveCXXComments without multi line: '${${Output}}'")

endmacro (RemoveCXXComments)
#-----------------------------------------------------------------






from CMakeLists.txt6:
GenerateIDLLibrary(TestPayload TestPayload.idl)

from IB.DDS.cmake:59:
# Get expected generated files
GetDDSGeneratedFiles(DDSCXXGeneratedFiles DDSHGeneratedFiles ${IdlFile})
# message("CXX Files expected to be generated:     '${DDSCXXGeneratedFiles}'")
#message("H Files expected to be generated:    '${DDSHGeneratedFiles}'")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 12:44:27

错误消息是您的一个变量为空的提示。您可以输出变量并检查哪个变量是空的,不应该是空的。我猜Windows的某些地方失败了,并且没有设置变量。如果变量为空或未设置,CMake根本看不到您提供了一个参数。

如果要强制执行正则表达式,可以在参数周围加上引号。然后,CMake知道您给出了正确的参数数,并且它并不抱怨"“作为一个论点。但这并不能解决你真正的问题,而只能平息你当前的问题。我不建议你这样做,直到你真正知道这是可以的。

票数 3
EN

Stack Overflow用户

发布于 2014-01-10 12:45:37

输出输入FileContent都是未定义的。错误必须在其他地方,您可能会使用

代码语言:javascript
复制
if( DEFINED ${Output} )
    message( "Output defined")

来检查它们的一致性。

->作为一个提示,如果您编写了这段代码,您可能会替换

代码语言:javascript
复制
${variable}

使用

代码语言:javascript
复制
"${variable}

为了避免使用未定义的变量(如果"“字符串更可取,则仍然需要解决为什么要使用未定义变量)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21044665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档