C++ 使用名为:CDR的宏的不正确参数调用CMAKE:CDR宏

C++ 使用名为:CDR的宏的不正确参数调用CMAKE:CDR宏,c++,linux,macos,macros,cmake,C++,Linux,Macos,Macros,Cmake,试图运行cmake时,我的.cmake文件出现此错误“CDR宏为名为:CDR的宏调用了不正确的参数” 我在Linux上使用的是完全相同的文件,从来没有出现过这个问题,它只发生在Mac上 我假设Linux和OSx具有类似的配置 有什么想法吗 以下是我得到的错误: ~/Findsmpq.cmake:20(CDR):使用不正确的参数调用CDR宏 对于名为:CDR调用堆栈的宏(最新调用优先): ~/cmakemodules/Findsmpq.cmake:166 (列表索引)CMakeLists.txt:

试图运行cmake时,我的.cmake文件出现此错误“CDR宏为名为:CDR的宏调用了不正确的参数”

我在Linux上使用的是完全相同的文件,从来没有出现过这个问题,它只发生在Mac上

我假设Linux和OSx具有类似的配置

有什么想法吗

以下是我得到的错误:

~/Findsmpq.cmake:20(CDR):使用不正确的参数调用CDR宏 对于名为:CDR调用堆栈的宏(最新调用优先):
~/cmakemodules/Findsmpq.cmake:166 (列表索引)CMakeLists.txt:172(查找包)

这是我的.cmake文件的代码

   7   #--------------------------------------
   8 # macros related to list
   9 MACRO(CAR var)
   10 SET(${var} ${ARGV1})
   11 ENDMACRO(CAR)
   12 
   13 MACRO(CDR var junk)
   14 SET(${var} ${ARGN})
   15 ENDMACRO(CDR)
   16 
   17 MACRO(LIST_INDEX var index)
   18 SET(list . ${ARGN})
   19 FOREACH(i RANGE 1 ${index})
   20 CDR(list ${list})
   21 ENDFOREACH(i)
   22 CAR(${var} ${list})
   23 ENDMACRO(LIST_INDEX)
   24 
   25 #--------------------------------------
在166号线附近

 134 #--------------------------------------
 135 # to find Qt choose compiler directory
 136 MACRO(QT_COMPILER_LIST result2 curdir2)
 137
 138 FILE(GLOB children2 RELATIVE ${curdir2} ${curdir2}/*)
 139
 140 SET(dirlist2 "")
 141
 142 FOREACH(child2 ${children2})
 143 if(IS_DIRECTORY ${curdir2}/${child2})
 144   if(WIN32)
 145     string(REGEX MATCH "^msvc[_0-9]*" QTCOMP ${child2})  #RE to match MSVC compiled libraries by default
 146   endif(WIN32)
 147   if(UNIX)
 148     string(REGEX MATCH "^gcc[_0-9]*" QTCOMP ${child2})  #RE to match GCC compiled libraries by default (64 bit)
 149   endif(UNIX)
 150
 151  LIST(APPEND dirlist2 ${QTCOMP})
 152 endif()
 153 ENDFOREACH()
 154
 155 SET(${result2} ${dirlist2})
 156
 157 ENDMACRO()
 158
 159 QT_COMPILER_LIST(QT_COMP_DIR ${HOME_DIR}/${QT_PREFIX}/${QT_VER_PREFIX})
 160
 161 message(STATUS "QT_COMP_DIR_LIST :" ${QT_COMP_DIR})
 162
 163 LIST(LENGTH QT_COMP_DIR len)
 164 MESSAGE(STATUS "Number of Qt Compilers:" ${len})
 165
 166 LIST_INDEX(QT_COM_PATH ${len} ${QT_COMP_DIR})   #len specifies which compiler from the list to use
 167 message(STATUS "QT COMP DIR USED:" ${QT_COM_PATH})
 168
 169 if(WIN32)
 170   set(POSSIBLE_PREFIX_PATH  ${HOME_DIR}${QT_PREFIX}/${QT_VER_PREFIX}/${QT_COM_PATH}/lib/cmake)
 171   message(STATUS "QT POSSIBLE_PREFIX_PATH:" ${POSSIBLE_PREFIX_PATH})
 172 endif(WIN32)
 173
 174 if(UNIX)
 175   set(POSSIBLE_PREFIX_PATH ${HOME_DIR}/${QT_PREFIX}/${QT_VER_PREFIX}/${QT_COM_PATH}/lib/cmake)
 176   message(STATUS "QT POSSIBLE_PREFIX_PATH:" ${POSSIBLE_PREFIX_PATH})
 177 endif(UNIX)
 178
 179 find_path(CMAKE_DIR Qt5Config.cmake PATHS ${POSSIBLE_PREFIX_PATH}/Qt5)
 180
 181 endif()
 182
 183 #--------------------------------------------------------------
现在查看CMakeLists.txt中的第172行

168 #smpq qt based application
169
170 if(ENABLE_QT_GUI)
171
172  find_package(smpq)
173  if(NOT SMPQ_FOUND)
174    message(FATAL_ERROR "Could not find SMPQ")
175  endif(NOT SMPQ_FOUND)
176
177  set(CMAKE_PREFIX_PATH ${PREFIX_PATH})
178  message(STATUS "CMAKE_PREFIX_PATH" ${CMAKE_PREFIX_PATH})
179
180  find_package(Qt5 REQUIRED COMPONENTS Widgets Core Sql PrintSupport)
181
182  qt5_wrap_cpp(QtProjectLib_hdr_moc ${QtProjectLib_hdr})
183  qt5_wrap_ui(QtProjectLib_ui_uic ${QtProjectLib_ui})
184  qt5_add_resources(QtProjectLib_qrc_rcc ${QtProjectRsc_qrc})
185
186  include_directories (${PROJECT_SOURCE_DIR})
187  include_directories (${PROJECT_BINARY_DIR})
188
189  add_library (QtProjectLib STATIC ${QtProjectLib_src} ${QtProjectLib_hdr_moc} ${QtProjectLib_ui_uic})
190
191  target_link_libraries (QtProjectLib 
192    Qt5::Core 
193    Qt5::Gui 
194    Qt5::Widgets 
195    Qt5::Sql 
196    Qt5::PrintSupport)
197
198  # WIN32 to suppress the console window under Windows
199  add_executable(KTAB_SMP WIN32 ${QtProjectBin_src} ${QtProjectLib_qrc_rcc})
200
201  target_link_libraries (KTAB_SMP
202    QtProjectLib 
203    smp 
204    ${KMODEL_LIBRARY} 
205    ${KUTILS_LIBRARY} 
206    ${SQLITE_LIBRARIES} 
207    ${EFENCE_LIBRARIES}
208    ${TINYXML2_LIBRARIES})
209
210  if(ENABLE_COPY_QT_LIBS AND WIN32)
211    find_package(qtdlls)
212  endif(ENABLE_COPY_QT_LIBS AND WIN32)
213
214 endif (ENABLE_QT_GUI)

错误在哪一行触发?能否给出完整的错误消息,包括堆栈跟踪?汽车和CDR是非常不符合标准的。使用CMake可能可以以不同的方式更好地解决问题。对
list\u index()
的调用之一是使用未替换的空值调用
cdr()
,这使它看起来像是只使用一个参数调用的。如果您试图查找有关Qt安装的信息,使用一些内省,而不是拖拽您的文件系统。Qt3和Qt4的CMake。Qt本身Qt5@usr1234567你是对的,我承认代码不是很清楚,我道歉,我只是在应该更合理的地方编辑了代码,包括行号。