Есть ли способ автоматически сделать библиотеку статической или динамической? - PullRequest
1 голос
/ 10 мая 2009

Я знаю, что это может быть длинный выстрел, но здесь это идет. У меня есть несколько активных проектов, и у каждого есть библиотека подпроектов, которая компилируется при компиляции основного проекта. Эти библиотеки являются динамическими, но в последнее время возникла проблема, из-за которой эти библиотеки (большинство из которых являются общими для проектов) должны быть статическими, а не динамическими.

Теперь я совершенно уверен, что кто-то разработал систему, в которой я мог бы создать библиотеку, которая могла бы быть скомпилирована как статическая в проект или динамическая, с чем-то вроде простой директивы препроцессора или чего-то в этом роде. Если нет, я буду мечтать.

редактирование:

похоже, что CMake мог бы быть им, однако, помимо создания материала, я бы также хотел облегчить __declspec (dllimport) и __declspec (dllexport) из своего кода, чтобы я мог автоматически переключаться между статическим и динамическим. Хотя это довольно легко сделать с макросами препроцессора, я подумал, что может быть какая-то форма системы уже используется людьми?

Ответы [ 3 ]

2 голосов
/ 10 мая 2009

Мне нравится использовать CMake , чтобы избежать подобных проблем.

1 голос
/ 10 мая 2009

Если вы хотите, чтобы он был кроссплатформенным, вам придется использовать такой инструмент, как SCons или Make, и настраивать различные аргументы компилятора / компоновщика в зависимости от того, какие командные переменные вы передаете. Это необходимо сделать для каждой платформы и комбо типа ссылки, которое вы поддерживаете.

В диспетчере конфигурации Visual Studio (вы не ограничены только выпуском и отладкой), а затем вы можете использовать ReleaseStatic и ReleaseDynamic и любые другие конфигурации, которые вы можете придумать. Затем вы просто устанавливаете соответствующие ключи компилятора и компоновщика для каждой конфигурации.

0 голосов
/ 10 мая 2009

Загрузите исходный код cURL и ознакомьтесь с его настройками. Он может создавать libcurl для DLL или статических в Windows, а также статических или общих объектов в Unix.

...