Как узнать, имеет ли исходный файл c ++ основную функцию или нет? - PullRequest
3 голосов
/ 18 марта 2012

Есть ли у кого-нибудь идеи по проверке существования главной функции в источнике c ++, так как я хочу написать несколько автоматический make-файл, чтобы исходники c ++ с main функцией были связаны, а те, у которых нет функции main, не будут связаны.

Лексический или грамматический разбор может не подойти для этой простой задачи.

Любые существующие инструменты или библиотеки командной строки будут очень полезны для этой автоматической задачи.

Спасибо залюбые идеи!

Файл makefile:

VPATH = include
CPPFLAGS += -I include
CFLAGS += -I include

C_SOURCE := $(shell find . -iname '*.c')
CPP_SOURCE := $(shell find . -iname '*.cpp')
D_OBJ := $(subst .cpp,.d, $(CPP_SOURCE))
EXE := $(subst .c,, $(C_SOURCE))
EXE += $(subst .cpp,, $(CPP_SOURCE))

.PHONY: all
all: $(EXE)

include $(D_OBJ) 

$(D_OBJ): %.d: %.cpp
    $(CC) -MM $(CPPFLAGS) $< > $@.temp;
    auto_depend_gen $@ "$@.temp" > $@; 
    rm -rf $@.temp

#print_msg:
#   @printf "$(EXE)\n"
#   @printf "$(D_OBJ)\n"

.PHONY: clean
clean:
    rm $(EXE) $(D_OBJ)

Так что это make-файл автоматической генерации зависимостей.С этим make-файлом мне не нужно изменять make-файл каждый раз, когда я добавляю исходный файл C ++.Заголовки определяются командой "gcc -MM", и объектные файлы, которые я хочу связать, имеют одно и то же имя с файлами заголовков, за исключением суффиксов.auto_depend_gen - это программа, написанная мной, которая просто удаляет суффикс .o первой строки файла, сгенерированного "gcc -MM".

Некоторые исходные файлы имеют функцию main, а некоторые - нет, поэтому возникает эта проблема.

Возможно, более общий вопрос заключается в том, что проект Java может быть построен автоматически с использованием несколькихФайлы .class, имеющие основную функцию, но C ++ не может.Поэтому я просто хочу решить эту проблему.

Оцените больше комментариев!

Ответы [ 2 ]

5 голосов
/ 18 марта 2012

Вы можете использовать nm для отображения символов в объектном файле.Проверьте, является ли main одним из них.

1 голос
/ 18 марта 2012

Эта команда Linux должна предоставить вам список файлов с функцией main ():

grep -Er 'main\s*\(' * | cut -d':' -f1

Вы должны обработать случай, когда в этом списке более одного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...