Относительно использования cmake для связывания объектных файлов в файле lib.xxxx.a , но не совсем так, я построил несколько статических библиотек в Windows, используя CMake 2.8.x, используя VS2008 SP1. Есть ли способ только через CMake связать все файлы .obj внутри всех существующих статических библиотек в одну большую монолитную библиотеку, предпочтительно с помощью функции add_library
CMake, или с помощью другой аналогичной конструкции?
Я думаю, что ответ «нет», и поэтому я подумал о том, чтобы развернуть свою собственную с помощью пользовательской команды с помощью обычного подхода add_custom_command
+ add_custom_target
, который просто создает библиотеку вручную, предоставляя все остальные библиотеки .obj файлов при вызове LINK.EXE
. Но я вижу некоторые проблемы с этим подходом:
- Я не смог найти переменную CMake, которая указывает полный путь к исполняемому файлу
LINK.EXE
. Затем мне пришлось бы каким-то образом получить путь к LINK.EXE
, используя хрупкую эвристику: он хрупок в том смысле, что разные версии Visual Studio могут найти файл LINK.EXE
в разных каталогах, и мне нужно, чтобы это работало для обоих 32-разрядные и 64-разрядные условия компилятора Windows, а также устойчивость к обновлениям между VS2008 и будущими версиями компилятора.
- Мне нужно найти способ найти все файлы .obj других статических библиотек, во время сборки против во время CMake , поскольку во время CMake. Конечно, файлы obj не существуют (всегда). Из соображений производительности сборки я не хочу извлекать файлы .obj из файлов .lib ради добавления их в командную строку
LINK.EXE
, поэтому конструкция FILE(GLOB...)
будет моей лучшей второй альтернативой в этом случай.
- Может быть возможно просто позвонить
LINK.EXE
через: LINK.EXE /OUT:monolithic.lib lib1.lib lib2.lib ...
, но, возможно, не все .obj будут включены (РЕДАКТИРОВАТЬ: я подтвердил, что LINK.EXE
пропускает некоторые файлы .obj из lib1.lib lib2.lib ...
без какой-либо диагностики сообщения, объясняющие почему, поэтому этот подход не является началом); онлайн-документы на LINK.EXE
пока неясны. У кого-нибудь есть опыт использования LINK.EXE
таким образом?
Спасибо
Brent
P.S., я знаю, как создать DLL с помощью CMake, но я специально не хочу прибегать к созданию DLL в данный момент времени.