Как правильно скомпилировать и связать программу C?

0

У меня есть регистратор, который я написал на C, и включил его в проект C++, над которым я работаю. Он работает нормально, но из Clang++ я получаю устаревшее предупреждение: "При обработке ввода C в качестве C++ в режиме C++ это поведение устарело".

В надежде избавиться от этого предупреждения я переместил компиляцию регистратора в свой собственный шаг в файле make и скомпилировал объектный файл с помощью Clang. Затем я добавил ссылку на этот объектный файл в мое правило Clang++ для ссылки. Теперь он не может правильно связать: "Ошибка команды Linker с кодом выхода 1"

Мой файл подкачки ниже. Как я должен правильно собирать и связывать этот C-журнал, чтобы избавиться от этого предупреждения в Clang++?

CC= clang++
PROG= ./bin/tetris
OBJS= ./src/main.o ./src/Tetris.o ./src/states/BaseState.o ./src/states/MenuState.o \
    ./src/states/GameState.o ./src/entities/Block.o ./src/entities/Tetromino.o \
    ./src/entities/Grid.o
LIBS= allegro-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_ttf-5.0 allegro_color-5.0 \
    allegro_primitives-5.0 allegro_main-5.0 allegro_image-5.0 allegro_audio-5.0 allegro_memfile-5.0
CXXFLAGS= -g -Wall -std=c++11 $(shell pkg-config --cflags ${LIBS})
LDFLAGS= $(shell pkg-config --static --libs ${LIBS})

all: logger $(PROG)

$(PROG): $(OBJS)
    mkdir -p ./bin
    $(CC) -v -o $(PROG) $(LDFLAGS) $(OBJS) ./src/util/SimpleLogger/simplog.o
    rm -f $(OBJS)

logger:
    clang -c -Wall ./src/util/SimpleLogger/simplog.c -o ./src/util/SimpleLogger/simplog.o

clean:
    rm -f $(PROG) $(OBJS)
Теги:
makefile

1 ответ

3
Лучший ответ

Возможно, это не то, что вы ищете, но вы можете включить его в свой C++ файл:

#ifdef __cplusplus
extern "C" {
#endif

// C code

#ifdef __cplusplus
}
#endif
  • 0
    План состоит в том, чтобы иметь возможность использовать этот регистратор в проектах C и / или C ++. Не похоже, что это поможет мне достичь этой цели ...
  • 0
    @PseudoPsyche Именно так вы делаете заголовок C и C ++ совместимым.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню