Связывание нескольких статических файлов .lib в один монолитный файл .lib с использованием VS2008 SP1 и CMake 2.8.x

В связи с с использованием cmake для связывания объектных файлов с файлом lib.xxxx.a , но это не совсем то же самое, я создал несколько статических библиотек в Windows с помощью CMake 2.8.x с использованием VS2008 SP1. Есть ли способ через один только CMake повторно связать все файлы .obj внутри всех этих существующих статических библиотек в одну большую монолитную библиотеку, предпочтительно через функцию CMake add_library , или другая подобная конструкция?

Я думаю, что ответ - «нет», и поэтому я подумал о том, чтобы прокрутить свой собственный с помощью специальной команды с помощью обычного подхода add_custom_command + add_custom_target , который просто создает библиотеку вручную, предоставляя всем остальным библиотекам файлы .obj при вызове LINK.EXE . Но я вижу некоторые проблемы с этим подходом:

  1. Мне не удалось найти переменную CMake, которая указывает полный путь к исполняемому файлу LINK.EXE . Затем мне пришлось бы каким-то образом получить путь к LINK.EXE , используя хрупкую эвристику: он хрупкий в том смысле, что разные версии Visual Studio могут размещать файл LINK.EXE в разных каталоги, а я m, чтобы это работало как для 32-разрядных, так и для 64-разрядных версий компилятора Windows, а также было устойчивым к обновлениям между VS2008 и будущими версиями компилятора.
  2. Мне нужно было бы найти способ найти все файлы .obj в другие статические библиотеки, во время сборки по сравнению с во время CMake , поскольку во время CMake файлы .obj, конечно, (всегда) не существуют. По соображениям производительности сборки я не хочу прибегать к извлечению файлов .obj из файлов .lib ради добавления их в командную строку LINK.EXE , поэтому файл FILE (GLOB ...) Конструкция была бы моей лучшей второй альтернативой в этом случае.
  3. Возможно, можно будет просто вызвать LINK.EXE через: LINK.EXE / OUT: monolithic. lib lib1.lib lib2.lib ... , но, возможно, не все .obj ' s будут включены (РЕДАКТИРОВАТЬ: я подтвердил, что LINK.EXE опускает некоторые файлы .obj из lib1.lib lib2.lib ... без каких-либо диагностических сообщений, объясняющих почему, так что это подход нестандартный); онлайн-документы для LINK.EXE неясны по этому поводу. У кого-нибудь есть опыт использования LINK.EXE таким образом?

Спасибо,

Brent

PS, я знаю, как создать DLL с помощью CMake, но я специально не хочу прибегают к созданию библиотеки DLL на данном этапе.

7
задан Community 23 May 2017 в 12:13
поделиться