Из недавнего сообщения стало понятно, что универсального решения нету. На сколько я понял проблема в том, что cmake крут, но с ужасным синтаксисом и отвратным способом расширения.
Предлагаю «разработать» новую систему сборки с красивым и простым синтаксисом и большим кол-вом плюшек.
Чтобы было от чего отталкивался, предлагаю первый - очень грубый вариант:
файл solution - основной, с базовыми определениями.
solution = "hello"
# comment
flags.release = flags.02, flags.wall, flags.c++11, flags.sse41
flags.reldeb = flags.02, flags.g
смысл сборки такой, указываем bs(build system) файл solution, дальше система сканирует систему каталогов и ищет проекты.
существует возможность отключать проекты: однако если мы отключим проект «mylib», то получим ошибку, т.к. проект name требует mylib
project = c++ # supported: mingw, gcc, clang, icc, microsoft
name = "name"
type = app
version = 1.0.41
files.srcs = ["src/*.cpp"]
files.hdrs = ["src/*.hpp", "src/version.h"]
request = packages.Qt(>=4.7), packages.tbb(=3.0<=4.1), packages.boost(<=1.48.0), packages.mylib
project = c # на этапе конфигурации можно выбрать компилятор
name = "mylib"
version = 0.1.1
type = static lib
flags.release = flags.02, flags.wall
files.srcs = ["src/*.c"]
files.hdrs = ["src/*.h"]
request = packages.tbb(=3.0<=4.1), packages.boost(<=1.48.0)
project = tex # supported: miktex, texlive, ...
name = "tex_name"
type = pdf # pdf, ps, dvi
files.srcs = ["doc/*.tex"]
project = c++, cuda
name = "cuda_app"
type = app
use = false # по умолчанию отключен
files.srcs = ["src/*.cpp", "src/code.cu"]
files.hdrs = ["src/*.hpp"]
request = packages.cuda(=4.0)
теперь нет необходимости писать много года типа
find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtNetwork REQUIRED)
include(${QT_USE_FILE})
include_directories( ${QT_INCLUDE_DIR} )
set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_INCLUDE_DIRS_CONFIGCMAKE} ${QT_INCLUDE_DIR}")
set(QT_LIBS ${QT_LIBRARIES})
...
теперь можно так:
...
request = packages.Qt(>=4.7)
Возможность генерировать Visual Studio 2010, Eclipse, QtCreator(плагин), GNUMakefile, xCode, PythonScript(самосборка - типа scons/waf)
возможность использования ccache, distcc
предлагайте улучшения ...