Михаил , СПАСИБО, все получилось!
Я забыл про
set_source_files_properties Подведем итог.Итак, если у нас имеется проект (библиотека, или приложение) например с такой структурой:
file1.h
file1_p.h //здесь определен приватный класс
file1.cpp
file2.h
file2_p.h //здесь определен приватный класс
file2.cpp
в котором используется
pimpl (хотя не важно) и мы хотим
чтобы он (проект) собирался как и с помощью
qmake так и с помощью
CMake, то необходимо следующее:
1. Во всех файлах *.cpp проекта в которых имеются классы наследуемые от QObject в конце нужно подключить moc_*.cpp файлы:
file1.cpp...
//в самом конце файла
#include "moc_file1.cpp"
file2.cpp...
//в самом конце файла
#include "moc_file2.cpp"
2. Создать CMakeLists.txt , в котором помимо "основного" содержимого необходимо чтобы было это:
CMakeLists.txt ...
...
#Перечисляем все файлы с реализацией.
set( PRJ_SRCS
file1.cpp
file2.cpp
)
...
...
#Перечисляем все файлы с определениями.
#Вот этот набор PRJ_HDRS не нужен в данном случае!
#т.е. в таком виде заголовки не нужны нам вообще в данном проекте,
#т.к. они не используются нигде!
#поэтому можно не писать вообще!
set( PRJ_HDRS
file1.h
file1_p.h
file2.h
file2_p.h
)
...
...
#Теперь заставляем генерить нужные нам moc_*.cpp файлы.
#Обязательна такая вещь как CMAKE_CURRENT_BINARY_DIR!
qt4_generate_moc( file1.h ${CMAKE_CURRENT_BINARY_DIR}/moc_file1.cpp )
qt4_generate_moc( file2.h ${CMAKE_CURRENT_BINARY_DIR}/moc_file2.cpp )
...
...
#Далее делаем обязательно так:
set_source_files_properties( file1.cpp OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_file1.cpp )
set_source_files_properties( file2.cpp OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_file2.cpp )
#Далее делаем так:
#и как видим, набора PRJ_HDRS здесь нету, он и не нужен!
#По крайней мере у меня все собралось.
add_library( ${LIB_TARGET} STATIC ${PRJ_SRCS} )
(ЗЫ: если у нас приложение - то вместо add_library пишем add_executable)
...
...
3. Компилим.
Всё, должно теперь работать.
ЗЫ: Спасибо Филоненко Михаилу за терпение!