<div dir="ltr"><div>Thank you very much for your help, Jakob,  I replace file(GLOB) with set() macro. It works now. I'll look at qt4_wrap_cpp macro and see if I can use it. In my case, Qt may not be installed on the system with the default location, it is under the Thirdparty  directory. I am not sure if the macro can automatically find Qt.</div><div><br></div><div>Thanks again,</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 1, 2016 at 3:02 AM, Jakob van Bethlehem <span dir="ltr"><<a href="mailto:jsvanbethlehem@gmail.com" target="_blank">jsvanbethlehem@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hej,<div><br></div><div>Some things that come to mind:</div><div>* You're generating files *inside* the source tree - you're not supposed to do that</div><div>* Why do you want to have a special Qt_tmp directory? I don't see the benefit, and without that requirement you can simply use the qt4_wrap_cpp macro explicitly and you still are not forced to use the automoc feature</div><div><br></div><div>And now for what is probably wrong in your CMakeLists.txt:</div><div>* It seems you made an important mistake regarding the behaviour of 'file(GLOB)'. That function will do the expansion *while running CMake*. But at that time the moc_* files *don't exist!* (as a matter of fact, the tmp directory doesn't even exist). In other words, your ${Moc_SOURCES} will be empty, and hence they are not compiled, and hence you get precisely the linker errors you see (because these sources implement the functions that are listed as missing by the linker)</div><div><br></div><div>If you would use the qt4_wrap_cpp() macro you don't run into this problem, so I'd strongly suggest using it.</div><div><br></div><div>Sincerely,</div><div>Jakob van Bethlehem</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Tue, May 31, 2016 at 4:52 PM, irene w <span dir="ltr"><<a href="mailto:ire866306@gmail.com" target="_blank">ire866306@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"><div><div class="h5"><div dir="ltr"><div>It seems CMakw could not find the generated moc_xxx files.  I modified the scripts to specify moc_xxx files is generated, but it still has same errors.</div><div><br></div><div>ADD_CUSTOM_COMMAND ( OUTPUT ${Qt_tmp}/moc_GMWindow.cpp<br>                     COMMAND ${QT_MOC_CMD} ${GM_DIR}/GMWindow.h -o ${Qt_tmp}/moc_GMWindow.cpp</div><div>                     DEPENDS ${GM_DIR}/GMWindow.h <br>                   )<br>ADD_CUSTOM_TARGET(generate_foo DEPENDS ${Qt_tmp}/moc_GMWindow.cpp)<br>SET_SOURCE_FILES_PROPERTIES(${Qt_tmp}/moc_GMWindow.cpp PROPERTIES GENERATED 1)<br>SET_PROPERTY(SOURCE ${GM_DIR}/GMWindow.cpp APPEND PROPERTY OBJECT_DEPENDS ${Qt_tmp}/moc_GMWindow.cpp)</div><div><br></div><div>.....</div><div>add_dependencies (GM generate_foo)</div><div><br></div><div><br></div><div>Does the Macro  "SET_SOURCE_FILES_PROPERTIES" with "GENERATED" setting work for this purposes?  Any help would be greatly appreciated !</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 25, 2016 at 12:48 PM, irene w <span dir="ltr"><<a href="mailto:ire866306@gmail.com" target="_blank">ire866306@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"><div dir="ltr"><div>Hi,</div><div><br></div><div>I am compiling a simple Qt3 application on Linux using CMake. In my case, I need to build moc_xxx files with custom options and output to a specified directory, So, I was not using CAMKE_AUTO macros. My cmake scripts create a "Qt_tmp" directory and output moc_xxx there. </div><div><br></div><div>It looked it always failed to link the moc_xxx files for the first time build when there is no "Qt_tmp" directory, and succeeded if I ran build again if the "Qt_tmp" directory and moc_xxx files created by the failed build were kept without removing.  However, it'll fail if I delete the "Qt_tmp" directory.</div><div><br></div><div>Even it failed at the first build, the moc_xxx files were successfully created in the "Qt_tmp" directory.</div><div><br></div><div>Here is my cmake scripts and the errors I got.  Can anyone help me to figure out the issues? Any help would be greatly appreciated.  Thanks.</div><div><br></div><div>CMakeLists.txt</div><div>---------------------------------------------------------------------------------------------</div><div>cmake_minimum_required(VERSION 3.4.1)<br>project (GM_Application CXX)</div><div>SET (CMAKE_SYSTEM_NAME Linux)<br>SET (CMAKE_CXX_COMPILER ${COMPILER_PATH}${CROSS_COMPILE}g++)</div><div>set (GM_DIR ${CMAKE_CURRENT_SOURCE_DIR})<br>set (QT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/Qt/4.8.6)<br>LINK_DIRECTORIES (${QT_DIR}/lib)<br>INCLUDE_DIRECTORIES ("${QT_DIR}/include"<br>                     "${GM_DIR}"<br>)</div><div>##### Compiling QT moc and ui  #####<br>set (QT_MOC_CMD ${QT_DIR}/bin/moc -I$(QT_DIR)/mkspecs/linux-g++ -I${QT_DIR}/include -I${QT_DIR}/include/QtGui)<br>file (MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Qt_tmp)<br>set (Qt_tmp ${CMAKE_CURRENT_SOURCE_DIR}/Qt_tmp)<br>add_custom_target (Moc_GMWindows <br>                   COMMAND ${QT_MOC_CMD} ${GM_DIR}/GMWindow.h -o ${Qt_tmp}/moc_GMWindow.cpp<br>                  )<br>      <br>##### Compiling application  ##### <br>file (GLOB GM_SOURCES ${GM_DIR}/*.h ${GM_DIR}/*.cpp)<br>file (GLOB Moc_SOURCES ${Qt_tmp}/*.h ${Qt_tmp}/*.cpp)<br>add_executable (GM ${GM_SOURCES} ${Moc_SOURCES})<br>target_include_directories (GM PRIVATE ${Qt_tmp})<br>add_dependencies (GM Moc_GMWindows)<br>target_link_libraries (GM QtGui)</div><div><br></div><div>-------------------------------------------------------------------------------------------</div><div>Errors:</div><div><br></div><div>Scanning dependencies of target Moc_GMWindows<br>[  0%] Built target Moc_GMWindows<br>Scanning dependencies of target GM<br>[ 14%] Building CXX object GM/CMakeFiles/GM.dir/GM/GM.cpp.o<br>[ 42%] Building CXX object GM/CMakeFiles/GM.dir/GM/GMService.cpp.o<br>[ 67%] Building CXX object GM/CMakeFiles/GM.dir/GM/GMWindow.cpp.o<br>[ 85%] Building CXX object GM/CMakeFiles/GM.dir/GM/main.cpp.o<br>[100%] Linking CXX executable ../bin/GM<br>CMakeFiles/GM.dir/GM/GMWindow.cpp.o: In function `GM::GMWindow::emitAppendMessage(QStrin<br>g)':<br>/GM/GMWindow.cpp:217: undefined reference to `GM::GMWindow::appendMessage(QString)'<br>CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for GM::GMWindow]<br>+0x8): undefined reference to `GM::GMWindow::metaObject() const'<br>CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for GM::GMWindow]<br>+0xc): undefined reference to `GM::GMWindow::qt_metacast(char const*)'<br>CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for GM::GMWindow]<br>+0x10): undefined reference to `GM::GMWindow::qt_metacall(QMetaObject::Call, int, void**)'<br>collect2: ld returned 1 exit status<br>make[2]: *** [bin/GM] Error 1<br>make[1]: *** [GM/CMakeFiles/GM.dir/all] Error 2<br>make: *** [all] Error 2</div><div><br></div></div><div><br>
<table style="border-top-color:rgb(211,212,222);border-top-width:1px;border-top-style:solid">
        <tbody><tr>
        <td style="width:55px;padding-top:13px"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank"><img height="29" src="https://ipmcdn.avast.com/images/2016/icons/icon-envelope-tick-round-orange_184x116-v1.png"></a></td>
                <td style="width:470px;color:rgb(65,66,78);line-height:18px;padding-top:12px;font-family:Arial,Helvetica,sans-serif;font-size:13px">Virus-free. <a style="color:rgb(68,83,234)" href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank">www.avast.com</a>
                </td>
        </tr>
</tbody></table><a href="#m_6851439966933586043_m_3542150497808946122_m_6400203814648417669_DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2" height="1" width="1"></a></div>
</blockquote></div><br></div>
<br></div></div>--<br>
<br>
Powered by <a href="http://www.kitware.com" target="_blank" rel="noreferrer">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank" rel="noreferrer">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" target="_blank" rel="noreferrer">http://cmake.org/cmake/help/support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" target="_blank" rel="noreferrer">http://cmake.org/cmake/help/consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" target="_blank" rel="noreferrer">http://cmake.org/cmake/help/training.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank" rel="noreferrer">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/cmake" target="_blank" rel="noreferrer">http://public.kitware.com/mailman/listinfo/cmake</a><br></blockquote></div><br></div>
</blockquote></div><br></div>