С нашей системой сборки CMake я собираю несколько библиотек и несколько исполняемых файлов. Все продукты сборки выводятся в определенную папку.
Теперь проблема в том, что у меня есть набор инструментов VS2010 и VS2008, но мне нужен только набор инструментов VS2008 для библиотек VS2008. Выходные исполняемые файлы являются целью win32 для обеих цепочек инструментов, поэтому мне нужно собрать исполняемые файлы только один раз с помощью цепочки инструментов VS2010, в то время как цепочка инструментов VS2008 должна просто пропустить исполняемые файлы и собрать только нужные библиотеки (что экономит время сборки).
Базовые сценарии CMake и общая настройка также могут быть доставлены клиентам в будущем, поэтому было бы очень хорошо, если бы в CMake был способ отключить определенные цели, такие как все исполняемые файлы, в общем виде. В противном случае мне нужно написать много больших IF( BUILD_EXECUTABLES)... ENDIF()
вокруг моих настроек исполняемых файлов в моем CMakeLists.txt
, без CMake, выдающего мне ошибки, когда я их забываю.
Сборка запускается через некоторые командные файлы. В идеале я хочу передать переменную в cmake
помощью опции -D
(например, -D BUILD_EXECUTABLES=false
)
Я пытался обернуть макросы ADD_EXECUTABLE
но это не работает, так как у меня есть такие вызовы, как TARGET_LINK_LIBRARIES
которые потом жалуются на несуществующую цель.
Я мог бы также установить выходной каталог в какую-нибудь папку для мусора, которую потом можно будет удалить, но это (как уже упоминалось) не сэкономит время сборки. (У нас довольно огромный проект.)
Любые идеи о том, как сделать это простым и понятным способом?