А как насчет «атомного решения»?
EX - автоматически генерирует файл "QT moc" из CMakeLists.txt, а затем создает проект, который зависит от создаваемого файла .cpp
# inside project level CMakeLists.txt
# run shell script to create the "moc_GUICreator.cpp" auto-generated source file
if(UNIX)
execute_process(COMMAND "sh" ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_moc.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts )
endif(UNIX)
Где файл .sh содержит:
# generate_moc.sh
echo "generating moc file: moc ../include/GUICreator.h -o ../src/moc_GUICreator.cpp "
moc ../include/GUICreator.h -o ../src/moc_GUICreator.cpp
Эквивалентный пакетный файл Windows, "moc_creator_win.bat":
moc "GUICreator.h" -o "moc_GUICreator.cpp"
Не пробовал этот последний бит в окнах, но он или что-то очень близкое должно работать, сразу послеблок if (UNIX) в CMakeLists.txt:
if(WIN32)
execute_process(COMMAND "cmd" ${CMAKE_CURRENT_SOURCE_DIR}/scripts/moc_creator_win.bat WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts )
endif(WIN32)
Итак, если вы достаточно умны, вы можете делать что угодно из скрипта и использовать переменные CMake в качестве аргументов для него, я неконечно, если вы можете попросить больше ...
смысл состоит в том, чтобы избегать «непереносимых типов сборки», если вам действительно не нужно взламывать его в специализированном компиляторе, или вы не хотите использовать QT Designer дляразместить виджеты; -)