[CMake] CMake+QT always failed for the first build, and succeeded for second build or later.

irene w ire866306 at gmail.com
Tue May 31 10:52:41 EDT 2016


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.

ADD_CUSTOM_COMMAND ( OUTPUT ${Qt_tmp}/moc_GMWindow.cpp
                     COMMAND ${QT_MOC_CMD} ${GM_DIR}/GMWindow.h -o
${Qt_tmp}/moc_GMWindow.cpp
                     DEPENDS ${GM_DIR}/GMWindow.h
                   )
ADD_CUSTOM_TARGET(generate_foo DEPENDS ${Qt_tmp}/moc_GMWindow.cpp)
SET_SOURCE_FILES_PROPERTIES(${Qt_tmp}/moc_GMWindow.cpp PROPERTIES GENERATED
1)
SET_PROPERTY(SOURCE ${GM_DIR}/GMWindow.cpp APPEND PROPERTY OBJECT_DEPENDS
${Qt_tmp}/moc_GMWindow.cpp)

.....
add_dependencies (GM generate_foo)


Does the Macro  "SET_SOURCE_FILES_PROPERTIES" with "GENERATED" setting work
for this purposes?  Any help would be greatly appreciated !


On Wed, May 25, 2016 at 12:48 PM, irene w <ire866306 at gmail.com> wrote:

> Hi,
>
> 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.
>
> 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.
>
> Even it failed at the first build, the moc_xxx files were
> successfully created in the "Qt_tmp" directory.
>
> 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.
>
> CMakeLists.txt
>
> ---------------------------------------------------------------------------------------------
> cmake_minimum_required(VERSION 3.4.1)
> project (GM_Application CXX)
> SET (CMAKE_SYSTEM_NAME Linux)
> SET (CMAKE_CXX_COMPILER ${COMPILER_PATH}${CROSS_COMPILE}g++)
> set (GM_DIR ${CMAKE_CURRENT_SOURCE_DIR})
> set (QT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/Qt/4.8.6)
> LINK_DIRECTORIES (${QT_DIR}/lib)
> INCLUDE_DIRECTORIES ("${QT_DIR}/include"
>                      "${GM_DIR}"
> )
> ##### Compiling QT moc and ui  #####
> set (QT_MOC_CMD ${QT_DIR}/bin/moc -I$(QT_DIR)/mkspecs/linux-g++
> -I${QT_DIR}/include -I${QT_DIR}/include/QtGui)
> file (MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Qt_tmp)
> set (Qt_tmp ${CMAKE_CURRENT_SOURCE_DIR}/Qt_tmp)
> add_custom_target (Moc_GMWindows
>                    COMMAND ${QT_MOC_CMD} ${GM_DIR}/GMWindow.h -o
> ${Qt_tmp}/moc_GMWindow.cpp
>                   )
>
> ##### Compiling application  #####
> file (GLOB GM_SOURCES ${GM_DIR}/*.h ${GM_DIR}/*.cpp)
> file (GLOB Moc_SOURCES ${Qt_tmp}/*.h ${Qt_tmp}/*.cpp)
> add_executable (GM ${GM_SOURCES} ${Moc_SOURCES})
> target_include_directories (GM PRIVATE ${Qt_tmp})
> add_dependencies (GM Moc_GMWindows)
> target_link_libraries (GM QtGui)
>
>
> -------------------------------------------------------------------------------------------
> Errors:
>
> Scanning dependencies of target Moc_GMWindows
> [  0%] Built target Moc_GMWindows
> Scanning dependencies of target GM
> [ 14%] Building CXX object GM/CMakeFiles/GM.dir/GM/GM.cpp.o
> [ 42%] Building CXX object GM/CMakeFiles/GM.dir/GM/GMService.cpp.o
> [ 67%] Building CXX object GM/CMakeFiles/GM.dir/GM/GMWindow.cpp.o
> [ 85%] Building CXX object GM/CMakeFiles/GM.dir/GM/main.cpp.o
> [100%] Linking CXX executable ../bin/GM
> CMakeFiles/GM.dir/GM/GMWindow.cpp.o: In function
> `GM::GMWindow::emitAppendMessage(QStrin
> g)':
> /GM/GMWindow.cpp:217: undefined reference to
> `GM::GMWindow::appendMessage(QString)'
> CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for
> GM::GMWindow]
> +0x8): undefined reference to `GM::GMWindow::metaObject() const'
> CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for
> GM::GMWindow]
> +0xc): undefined reference to `GM::GMWindow::qt_metacast(char const*)'
> CMakeFiles/GM.dir/GM/GMWindow.cpp.o:(.rodata._ZTVN2GM8GMWindowE[vtable for
> GM::GMWindow]
> +0x10): undefined reference to
> `GM::GMWindow::qt_metacall(QMetaObject::Call, int, void**)'
> collect2: ld returned 1 exit status
> make[2]: *** [bin/GM] Error 1
> make[1]: *** [GM/CMakeFiles/GM.dir/all] Error 2
> make: *** [all] Error 2
>
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free.
> www.avast.com
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
> <#m_6400203814648417669_DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160531/a2c9cc2a/attachment-0001.html>


More information about the CMake mailing list