我在我的.cmake文件中遇到此错误,试图运行cmake" CDR宏调用错误的参数,名为:CDR"
我在Linux上使用完全相同的文件,并且从未将此问题发生在Mac上。
我假设Linux和OSx具有类似的配置。
有什么想法吗?
这是我得到的错误:
〜/ Findsmpq.cmake:20(CDR):使用不正确的参数调用CDR宏 对于宏命名:CDR Call Stack(最近一次呼叫):
〜/ cmakemodules / Findsmpq.cmake:166 (LIST_INDEX)CMakeLists.txt:172(find_package)
这是我的.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)