LINUX.ORG.RU

C передать аргумент при сборке

 


0

1

нужно во время сборки указать некоторый путь или строку, как это сейчас делается?

раньше при сборке использовал что-то типа -DCONF_PATH=«/etc»

а программе определял

#ifndef CONF_PATH
    #define CONF_PATH "/etc"
#endif

или как то по другому, забыл уже

★★

Последнее исправление: fMad (всего исправлений: 1)

Ответ на: комментарий от exception13

конечно можно, а потом выгрести вагон проблем с генераторами

попробовал я эти automake --force-missing --add-missing libtoolize --force autoconf

конечно круто, только не работает и гемороя добавляет

мне показалось, что проще поставлять один, легко читаемый и редактируемый Makefile, чем кучу непонятных шаблонов для генераторов непонятно чем

fMad ★★
() автор топика
Последнее исправление: fMad (всего исправлений: 1)
Ответ на: комментарий от fMad

Настройка компилятора -Dmacro=value. Если ты любишь Makefile, то логично и конфигурировать сборку через его же интерфейс, например так:

DEFINES =

ifdef HTTP_PREFIX
DEFINES += -DHTTP_PREFIX='"${HTTP_PREFIX}"'
$(shell rm -f src/CXWebServer.o)
endif
...
%.o: %.cpp
        ${CXX} -c ${CXXFLAGS} ${DEFINES} ${INC} $< -o $@

use:

> HTTP_PREFIX=HTTP/1.1 make

staseg ★★★★★
()

так и делается, если например есть файл main.c, то можно вот так: CFLAGS="-Wall -DAWESOME_MACRO=hello" make main, тогда все само собой скомпилируется, только с кавычками могут быть сложности, если в качестве макроса нужно передать строку с кавычками, то их надо хитро экранировать.

IvanR ★★★
()
Ответ на: комментарий от IvanR

если в качестве макроса нужно передать строку с кавычками, то их надо хитро экранировать

USERMACRO = '-DNEEDED_PATH=«$(PATH)»'

Не особо-то и хитро.

one_more_hokum ★★★
()
Последнее исправление: one_more_hokum (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.