我试图在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“表达式时,我会得到以下错误。
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的摘录:
Macro to get the content of a file
-----------------------------------------------------------------宏(GetFileContent OutFile)
#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}'")发布于 2014-01-10 12:44:27
错误消息是您的一个变量为空的提示。您可以输出变量并检查哪个变量是空的,不应该是空的。我猜Windows的某些地方失败了,并且没有设置变量。如果变量为空或未设置,CMake根本看不到您提供了一个参数。
如果要强制执行正则表达式,可以在参数周围加上引号。然后,CMake知道您给出了正确的参数数,并且它并不抱怨"“作为一个论点。但这并不能解决你真正的问题,而只能平息你当前的问题。我不建议你这样做,直到你真正知道这是可以的。
发布于 2014-01-10 12:45:37
输出或输入或FileContent都是未定义的。错误必须在其他地方,您可能会使用
if( DEFINED ${Output} )
message( "Output defined")来检查它们的一致性。
->作为一个提示,如果您编写了这段代码,您可能会替换
${variable}使用
"${variable}为了避免使用未定义的变量(如果"“字符串更可取,则仍然需要解决为什么要使用未定义变量)。
https://stackoverflow.com/questions/21044665
复制相似问题