Задать вопрос
@mitya_k

Превратить команду gcc в cmake?

Сам на СИ++ не пишу, но нужно в чужом проекте на СИ++ превратить следующую команду:
gcc 
  -o bin/esl1_demo 
  util/esl1_demo.c 
  -L./lib 
  -lesl1image 
  -I./include
  -fopenmp -g -O2 -fdebug-prefix-map=/build/graphicsmagick-7OaGZU/graphicsmagick-1.4+really1.3.35=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -pthread -I/usr/include/GraphicsMagick -L/usr/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/X11 -lGraphicsMagick -ljbig -lwebp -lwebpmux -llcms2 -ltiff -lfreetype -ljpeg -lpng16 -lwmflite -lXext -lSM -lICE -lX11 -llzma -lbz2 -lxml2 -lz -lzstd -lm -lpthread -lgomp


в инструкции на cmake.

Буду признателен тем, кто поможет)
  • Вопрос задан
  • 203 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
sheerluck
@sheerluck
Если бы проект был на С++ то команда была бы g++ ... util/esl1_demo.cpp ...
А у вас gсс ... util/esl1_demo.c ...
Так что вам потребуется перевести проект с языка С на С++
Создайте пустой cmake С++ проект с нуля и постепенно наполняйте его кодом.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Нельзя превратить эту команду в команду cmake.
Вам нужно написать файл cmakelists.txt, который положить в папку с проектом. Там описать проект, цели, подключаемые библиотеки, опции компилятор и т.п.

Сборка с помощью cmake происходит типовыми командами практически одинаковыми для любого cmake проекта. Находясь в каталоге сборки (любой пустой каталог):
cmake <каталог с проектом> -G <generator type>
cmake --build .

generator type - зависит от того с помощью чего вы планируете осуществлять сборку. Обычно в линукс это "Unix Makefiles" в винде например "Visual Studio 15 2017". Весь список поддерживаемых генераторов можно увидеть с помощью cmake --help
Ответ написан
Комментировать
@klirichek
Создаёте CMakeLists.txt

Пишете в нём наверху:
 
PROJECT ( esl1demo C )
Потом добавляете цель -
add_executable (esl1_demo util/esl1_demo.c)

И дальше последовательно, опцию за опцией, переносите их внутрь
target_include_directories (esl1_demo PRIVATE ./Include)
target_link_directories(esl1_demo  PRIVATE ./lib)
target_link_libraries(esl1_demo PRIVATE esl1image)
...


И далее по списку.
Опции компилятора - через target_compile_options, опции либы - через target_link_libraries и т.д.

Прямо ВСЕ прописывать, скорее всего, не нужно (например, -O2 -g - это часть стандартных флагов конфига RelWithDebInfo).

Проверяется попыткой сбилдить с флагом verbose. Там будет видно, какие именно опции передались компилятору; и будет ясно, какие надо добавить в проект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы