[CMake] How to write CMakeLists.txt for Qt4 when Q_OBJECT in xxx.cpp file

Clinton Stimpson clinton at elemtech.com
Sat Jul 31 12:42:23 EDT 2010


If you put main.moc in add_executable() then you don't have to use the 
set_source_files_properties() to manually specify dependencies.

Clint

On 07/31/2010 10:11 AM, 1+1=2 wrote:
> Thanks for your advice. I just want the project to be able to work
> under both cmake and qmake.
>
> I found an answer, which seems to work now.
>
>
> PROJECT(mytest)
> CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
> FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui REQUIRED)
> INCLUDE(${QT_USE_FILE})
> SET(pro_SOURCES  main.cpp)
>
> QT4_GENERATE_MOC(main.cpp main.moc)
> SET_SOURCE_FILES_PROPERTIES(main.cpp PROPERTIES OBJECT_DEPENDS main.moc)
>
> INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
> ADD_DEFINITIONS(${QT_DEFINITIONS})
> ADD_EXECUTABLE(mytest  ${pro_SOURCES})
> TARGET_LINK_LIBRARIES(mytest ${QT_LIBRARIES})
>
>
> Debao
>
>
> On Sat, Jul 31, 2010 at 11:54 PM, Michael Jackson
> <mike.jackson at bluequartz.net>  wrote:
>    
>> On Sat, Jul 31, 2010 at 11:45 AM, 1+1=2<dbzhang800 at gmail.com>  wrote:
>>      
>>> On Sat, Jul 31, 2010 at 11:28 PM, John Drescher<drescherjm at gmail.com>  wrote:
>>>        
>>>> On Sat, Jul 31, 2010 at 9:05 AM, 1+1=2<dbzhang800 at gmail.com>  wrote:
>>>>          
>>>>> Thanks for your answer.
>>>>>
>>>>> when use QT4_WRAP_CPP( Generated_MOC_SRCS main.cpp ),  moc_main.cxx
>>>>> will be generated.
>>>>> then I use #include "moc_main.cxx" instead of #include "main.moc"
>>>>>
>>>>> but ${Generated_MOC_SRCS}  can not be added to  ADD_EXECUTABLE.
>>>>> otherwise moc_main.cxx will be compiled too.
>>>>>
>>>>>            
>>>> You want moc_main.cxx to be compiled otherwise you will have link errors.
>>>>
>>>>          
>>> No, the file moc_main.cxx has been included in main.cpp through
>>> #include "moc_main.cxx". And this works.
>>>
>>> But what I want is: the name of  the moc file which is genenrated from
>>> main.cpp is main.moc, just as qmake does
>>>
>>> Debao.
>>>        
>>>> John
>>>>          
>> _why_ do you need to have the output file named main.moc? is there
>> some IDE or other pre/post processing script that relies on that name?
>> Or simply because that is how you did it with qmake? Again, _why_ do
>> you need to #include main.moc instead of just having it compiled
>> separately? The results are the same and there is NOTHING in main.moc
>> that you need to be editing as it is auto generated. Most IDEs will
>> index the main.moc file so code completion will continue to work even
>> if you do NOT #include main.moc.
>>
>> Not trying to be difficult here just saying that sometimes moving
>> build systems requires you to tweak some things. QMake is NOT CMake so
>> some things may be slightly different but the end results are the
>> same.
>>
>> Mike Jackson
>>
>>      
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>    



More information about the CMake mailing list