Как собрать библиотеку c из исходников
БлогNot. Как собрать проект C++ с github из исходников и подключить его к Visual Studio
Как собрать проект C++ с github из исходников и подключить его к Visual Studio
P.S. В новых сборках Visual Studio проекты из репозиториев открываются просто из меню Файл — Клонировать репозиторий. В статье речь идёт о ситуации, когда так сделать невозможно.
Благодаря менеджеру пакетов winget, уже входящему в актуальные сборки масдайки, теперь в Windows 10 можно инсталлировать приложения одной простой консольной командой (см. также доку от Микрософта).
Но мы рассмотрим сейчас ситуацию, когда у нас есть только ссылка на исходники проекта, скажем, на Гитхабе (возьмём для примера библиотеку для простых чисел primesieve) и нужно каким-то образом «вручную» скомпилировать внешний проект в своей Studio, чтобы воспользоваться его возможностями в своём приложении.
В противном случае, конечно же, нестандартный include вроде этого, который вы нашли в коде-образце
#include
работать не будет ни за что.
Первым делом скачаем все исходники внешнего проекта «как есть» в архиве .zip, для этого у нас на гитхабе есть кнопка «Download ZIP»:
Как загрузить проект с github в архиве .zip
Развернём проект, не создавая новой папки, если у вашего архиватора нет такого же пункта меню, просто сотрите предлагаемое архиватором имя новой папки, потому что папка уже есть в архиве:

Извлечь внешний проект из архива, не создавая новой папки
Если покопаться в файле readme.md проекта, как правило, можно найти инструкцию по установке (Build instructions) и даже «Detailed build instructions», где говорится, в числе прочего, и о компиляции проекта под Microsoft Visual C++:

Команды cmake для компиляции проекта со страницы документации
Откроем свой «некомпилируемый» без нужной библиотеки проект в Studio (я использую актуальную сборку версии 2019) и обратимся к команде меню Вид — Терминал. Выберем инструмент «Командная строка разработчика» (по умолчанию в новых сборках теперь выбран PowerShell, впрочем, если в документации приведены команды PowerShell, то применяйте их).
У Микрософта инструмент описан вот здесь.

Командная строка разработчика в Studio
В командной строке пишем команды из документации, но сначала, конечно, нужно перейти в ту папку, где у вас развёрнут скачанный проект. Мне понадобилось ввести в консоли следующее, завершая каждую команду нажатием Enter:
d: cd \temp\primesieve-master
— теперь я в нужной папке, так как развернул свой архив в папку d:\temp
Далее как написано:
cmake -G "Visual Studio 16 2019" . cmake --build . --config Release
Можно просто копировать команды со страницы документации, в окне консоли вверху есть стандартная кнопочка «Вставить». А вот точка в записи команд имеет значение, это ссылка на текущую папку!
Ну и, конечно, для другой версии Studio будет другое указание компилятора, узнать своё можно командой
cmake -G
Нужный генератор будет помечен в списке «звёздочкой».
Если что-то пошло не так, ошибаетесь в консольных командах и получаете сообщения об ошибках кэша — сотрите файл CMakeCache.txt из папки скопированного проекта и попробуйте снова.
Теперь проект можно открывать в Studio и работать с ним, все нужные файлы есть в папке d:\temp\primesieve-master
Но мы хотим подключить всё, что нужно, к своему имеющемуся проекту, а не пытаться модифицировать чужую библиотеку.
- Меню Проект — Свойства, слева выбираем Свойства конфигурации, C/C++, Общие, раскрываем поле «Дополнительные каталоги включаемых файлов», говорим «Изменить» и показываем на папку D:\Temp\primesieve-master\include . В вашем проекте, как правило, тоже будет вложенная папка include .
- В том же окне выбираем Компоновщик — Общие — Дополнительные каталоги библиотек, «Изменить» и добавляем путь D:\Temp\primesieve-master\Release . Этого может оказаться мало, у вашего проекта и внешнего должны быть выбраны одинаковые конфигурации решения. Так как я выбрал Release для внешнего проекта, то и в своём проекте в списке «Конфигурации решения» (на стандартной панели инструментов) указал Release и платформу x64. Можно было работать и с Debug, но тогда и внешний проект компилируем как Debug и потом выбираем путь D:\Temp\primesieve-master\Debug .
- В списке C/C++ — Создание кода — Библиотека времени выполнения выбрал Многопоточный DLL (/MD), иначе будет «LNK2038: обнаружено несоответствие для ‘RuntimeLibrary’: значение ‘MT_StaticRelease’ не соответствует значению ‘MD_DynamicRelease’ в file.obj».
- Сам файл библиотеки, как правило имеющий тип .lib , тоже нужно прописать. Всё в том же окне свойства проекта выбираем список Компоновщик — Ввод, раскрываем список «Дополнительные зависимости», жмём «Изменить» и указываем в поле ввода имя файла библиотеки primesieve.lib
- На всякий случай, проверяем, что у нас в списке Компоновщик — Система — Подсистема, у меня там просто Консоль (/SUBSYSTEM:CONSOLE) , для других типов проектов может понадобиться изменение и этой настройки.
После этого у меня всё заработало.
Ну а конкретная задача, на которой я проверял библиотеку — печать самых длинных цепочек последовательных простых чисел, в которых разница между соседними значениями строго возрастает или строго убывает, предел счёта равен 1000000, вот сама программа:
#include #include #include #include void print_diffs(const std::vector& vec) < for (size_t i = 0, n = vec.size(); i != n; ++i) < if (i != 0) std::cout std::cout int main() < std::vector asc, desc; std::vector
Ответы вышли такие:
Longest run(s) of ascending prime gaps up to 1000000: 128981 (2) 128983 (4) 128987 (6) 128993 (8) 129001 (10) 129011 (12) 129023 (14) 129037 402581 (2) 402583 (4) 402587 (6) 402593 (8) 402601 (12) 402613 (18) 402631 (60) 402691 665111 (2) 665113 (4) 665117 (6) 665123 (8) 665131 (10) 665141 (12) 665153 (24) 665177 Longest run(s) of descending prime gaps up to 1000000: 322171 (22) 322193 (20) 322213 (16) 322229 (8) 322237 (6) 322243 (4) 322247 (2) 322249 752207 (44) 752251 (12) 752263 (10) 752273 (8) 752281 (6) 752287 (4) 752291 (2) 752293
За счёт хорошо оптимизированного кода библиотеки считается всё мгновенно.
Это задача из списка задач на простые числа
21.10.2021, 13:15 [9925 просмотров]
Подготовка
Для начала нам понадобятся исходники Scan Tailor’а. Их можно скачать с официального сайта или взять из SVN. В SVN лежат самые последние изменения, и он предназначен прежде всего для разработчиков. Если вы решили взять исходники из SVN, предполагается, что вы представляете себе, что это такое. Если так, то вам достаточно знать SVN URL чтобы вы смогли взять исходники оттуда. Итак, SVN URL у нас такой:
- Базовый инструментарий для сборки. В Ubuntu есть мета-пакет build-essential, который тянет за собой все основные коомпоненты, необходимые для сборки программ из исходников.
- Система сборки CMake. Наверняка есть в репозитории вашего дистрибутиве под именем cmake.
- Qt версии по крайней мере 4.4.0. Она есть в достаточно свежих дистрибутивах, по крайней мере тех, где есть KDE 4.1 или выше, потому как KDE 4.1 требует Qt 4.4. Нужны не только сама библиотека Qt, но и заголовочные файлы, которые как правило находятся в пакетах с именами, заканчивающимеся на -dev. Например в Ubuntu нужный нам пакет называется libqt4-dev. Он потянет за собой и саму библиотеку Qt, если она еще не установлена.
- Заголовочные файлы от еще нескольких пакетов, а именно libpng (libpng12-dev), libjpeg (libjpeg62-dev), libtiff (libtiff4-dev), libxrender (libxrender-dev). Последний может также называться libXrender-dev, а раньше он был частью libx11-dev. Все эти пакеты определенно есть в репозитории вашего дистрибутива.
Сборка
Открываем консоль (терминал), идем в директорию, куда распаковали исходники Scan Tailor’а, и даем команду «cmake .» (там точка в конце):
cd "/home/username/путь/к/ST" cmake .
Если все прошло успешно, то ближе к концу вы увидите строки:
-- Configuring done -- Generating done
В противном случае какие-то необходимые компоненты не были найдены. Что именно не было найдено, должно быть понятно из сообщений об ошибках. В некоторых случаях компонент имеется, но система сборки все равно не может его найти. В этом случае надо запустить CMake в интерактивном режиме:
ccmake .
И потом вручную указать пути к тем или иным не найденным файлом. ccmake — консольное интерактивное приложение, так что не помешают некоторые инструкции.

- Клавишами со стрелками наводим курсор на строкy TIFF_LIBRARY.
- Enter.
- Вводим правильный путь.
- Enter.
- [Правим таким же образом остальные ненайденные пути].
- Жмем c
- Жмем g
Когда CMake наконец отработал успешно, можно приступать к самой сборке:
make
Если сборка завершается с ошибками (не доходит до 100%), задайте вопрос на форуме.
Теперь остается сделать:
sudo make install
На этом этапе вас спросят ваш пароль, так как инсталляция требует прав рута.
На этом сборка и инсталляция закончены, и Scan Tailor готов к запуску. К сожалению, данный процесс инсталляции не предусматривает создания пункта меню, так что вам придется либо создать его самостоятельно, либо запускать его через Alt+F2 набрая там комманду «scantailor» (без кавычек).
Как собрать библиотеку c из исходников
Пользователь
Регистрация: 11.08.2008
Сообщений: 19
Компиляция (сборка) библиотеки из исходников
Здравствуйте, у меня есть проблема. Я не могу при помощи той среды в которой я программирую скомпилировать стороннюю библиотеку.
Я скачал библиотеку для работы с форматом mseed, которая называется
libmseed, в которой есть примеры и исходники самой библиотеки. Есть make-файлы для сборки в том числе и под винду, но у меня не получилось её собрать. У меня 7-ка и я не прописывал переменные окружения в path до nmake потому что я не понимаю какой nmake мне нужен. Посмотрел по поиску и их у меня несколько. (Кстати как задать путь до nmake в path d 7-ке). Может мне кто помочь советом как вообще надо собирать библиотеку на винде. В результате я бы хотел получить просто статическую библиотеку.
C++ подключение библиотеки собранной из исходников
Помогите разобраться с подключением библиотеки. Я собрал библиотеку из исходников, в результате получил некоторую иерархию файлов и папок, официальная инструкция по установке библиотеки на этом заканчивается. Если библиотека состоит из папок lib, include, bin, то как подключить ее понятно. Но тут получается более сложная структура файлов и папок. Как подключить библиотеку в подобных случаях? Пытаюсь подключить библиотеку Wt, компилятор MinGW, если это важно.
Отслеживать
задан 24 авг 2017 в 10:08
13 3 3 бронзовых знака
Все правильно сделали, осталось сделать install. В случае генератора MSVC, надо собрать проект INSTALL .
24 авг 2017 в 11:39
Из другого CMake-проекта делаете find_library() / find_directory() , чтобы найти эти либы и хедеры, и include_directories() / target_link_libraries() их.
24 авг 2017 в 12:01
Для Wt вообще готовый модуль есть. Если текст ошибки не сказал ничего полезного, то откройте файл FindWt.cmake , там будет написано какие переменные надо установить.
