C++ 如何在MAKE中获得更好的错误消息?

C++ 如何在MAKE中获得更好的错误消息?,c++,debugging,makefile,php-extension,C++,Debugging,Makefile,Php Extension,我对CPP代码运行make命令。我收到如下错误消息: /home/itaymoav/dev/phpext/sitel/build/entities.cpp:在函数“void googleset\u free\u storage(void*)”中: 可以看出,除了向我显示带有错误的函数入口点外,它不再提供任何数据。是否有标志或其他方式来获取正确的错误消息 MakeFile->我知道它很大 srcdir = /home/itaymoav/dev/phpext/build builddir = /ho

我对CPP代码运行
make
命令。我收到如下错误消息:
/home/itaymoav/dev/phpext/sitel/build/entities.cpp:在函数“void googleset\u free\u storage(void*)”中:

可以看出,除了向我显示带有错误的函数入口点外,它不再提供任何数据。是否有标志或其他方式来获取正确的错误消息

MakeFile->我知道它很大

srcdir = /home/itaymoav/dev/phpext/build
builddir = /home/itaymoav/dev/phpext/build
top_srcdir = /home/itaymoav/dev/phpext/build
top_builddir = /home/itaymoav/dev/phpext/build
EGREP = /bin/grep -E
SED = /bin/sed
CONFIGURE_COMMAND = './configure' '--enable-entities'
CONFIGURE_OPTIONS = '--enable-entities'
SHLIB_SUFFIX_NAME = so
SHLIB_DL_SUFFIX_NAME = so
ZEND_EXT_TYPE = zend_extension
RE2C = exit 0;
AWK = gawk
ENTITIES_SHARED_LIBADD = -lstdc++
shared_objects_entities = entities.lo GoogleSet.lo
PHP_PECL_EXTENSION = entities
PHP_MODULES = $(phplibdir)/entities.la
PHP_ZEND_EX =
all_targets = $(PHP_MODULES) $(PHP_ZEND_EX)
install_targets = install-modules install-headers
prefix = /usr
exec_prefix = $(prefix)
libdir = ${exec_prefix}/lib
prefix = /usr
phplibdir = /home/itaymoav/dev/phpext/build/modules
phpincludedir = /usr/include/php5
CC = cc
CFLAGS = -g -O2
CFLAGS_CLEAN = $(CFLAGS)
CPP = cc -E
CPPFLAGS = -DHAVE_CONFIG_H
CXX = g++
CXXFLAGS = -g -O2
CXXFLAGS_CLEAN = $(CXXFLAGS)
EXTENSION_DIR = /usr/lib/php5/20090626+lfs
PHP_EXECUTABLE = /usr/bin/php
EXTRA_LDFLAGS =
EXTRA_LIBS =
INCLUDES = -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
LFLAGS =
LDFLAGS =
SHARED_LIBTOOL =
LIBTOOL = $(SHELL) $(top_builddir)/libtool
SHELL = /bin/bash
INSTALL_HEADERS =
mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644

DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main -I$(top_srcdir)
COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(PHP_FRAMEWORKPATH)

all: $(all_targets) 
    @echo
    @echo "Build complete."
    @echo "Don't forget to run 'make test'."
    @echo

build-modules: $(PHP_MODULES) $(PHP_ZEND_EX)

libphp$(PHP_MAJOR_VERSION).la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
    $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
    -@$(LIBTOOL) --silent --mode=install cp $@ $(phptempdir)/$@ >/dev/null 2>&1

libs/libphp$(PHP_MAJOR_VERSION).bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
    $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp$(PHP_MAJOR_VERSION).so

install: $(all_targets) $(install_targets)

install-sapi: $(OVERALL_TARGET)
    @echo "Installing PHP SAPI module:       $(PHP_SAPI)"
    -@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
    -@if test ! -r $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME); then \
        for i in 0.0.0 0.0 0; do \
            if test -r $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME).$$i; then \
                $(LN_S) $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME).$$i $(phptempdir)/libphp$(PHP_MAJOR_VERSION).$(SHLIB_DL_SUFFIX_NAME); \
                break; \
            fi; \
        done; \
    fi
    @$(INSTALL_IT)

install-modules: build-modules
    @test -d modules && \
    $(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
    @echo "Installing shared extensions:     $(INSTALL_ROOT)$(EXTENSION_DIR)/"
    @rm -f modules/*.la >/dev/null 2>&1
    @$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR)

install-headers:
    -@if test "$(INSTALL_HEADERS)"; then \
        for i in `echo $(INSTALL_HEADERS)`; do \
            i=`$(top_srcdir)/build/shtool path -d $$i`; \
            paths="$$paths $(INSTALL_ROOT)$(phpincludedir)/$$i"; \
        done; \
        $(mkinstalldirs) $$paths && \
        echo "Installing header files:          $(INSTALL_ROOT)$(phpincludedir)/" && \
        for i in `echo $(INSTALL_HEADERS)`; do \
            if test "$(PHP_PECL_EXTENSION)"; then \
                src=`echo $$i | $(SED) -e "s#ext/$(PHP_PECL_EXTENSION)/##g"`; \
            else \
                src=$$i; \
            fi; \
            if test -f "$(top_srcdir)/$$src"; then \
                $(INSTALL_DATA) $(top_srcdir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; \
            elif test -f "$(top_builddir)/$$src"; then \
                $(INSTALL_DATA) $(top_builddir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; \
            else \
                (cd $(top_srcdir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i; \
                cd $(top_builddir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i) 2>/dev/null || true; \
            fi \
        done; \
    fi

PHP_TEST_SETTINGS = -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1'
PHP_TEST_SHARED_EXTENSIONS =  ` \
    if test "x$(PHP_MODULES)" != "x"; then \
        for i in $(PHP_MODULES)""; do \
            . $$i; $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; \
        done; \
    fi; \
    if test "x$(PHP_ZEND_EX)" != "x"; then \
        for i in $(PHP_ZEND_EX)""; do \
            . $$i; $(top_srcdir)/build/shtool echo -n -- " -d $(ZEND_EXT_TYPE)=$(top_builddir)/modules/$$dlname"; \
        done; \
    fi`
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(define_syslog_variables|register_(globals|long_arrays)?|safe_mode|magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*='

test: all
    -@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
        INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \
        if test "$$INI_FILE"; then \
            $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \
        else \
            echo > $(top_builddir)/tmp-php.ini; \
        fi; \
        INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \
        if test "$$INI_SCANNED_PATH"; then \
            INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \
            $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \
        fi; \
        TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \
        TEST_PHP_SRCDIR=$(top_srcdir) \
        CC="$(CC)" \
            $(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \
    else \
        echo "ERROR: Cannot run tests without CLI sapi."; \
    fi

clean:
    find . -name \*.gcno -o -name \*.gcda | xargs rm -f
    find . -name \*.lo -o -name \*.o | xargs rm -f
    find . -name \*.la -o -name \*.a | xargs rm -f 
    find . -name \*.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp$(PHP_MAJOR_VERSION).la $(SAPI_CLI_PATH) $(OVERALL_TARGET) modules/* libs/*

distclean: clean
    rm -f Makefile config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h stamp-h sapi/apache/libphp$(PHP_MAJOR_VERSION).module buildmk.stamp
    $(EGREP) define'.*include/php' $(top_srcdir)/configure | $(SED) 's/.*>//'|xargs rm -f

.PHONY: all clean install distclean test
.NOEXPORT:
entities.lo: /home/itaymoav/dev/phpext/build/entities.cpp
    $(LIBTOOL) --mode=compile $(CXX)  -I. -I/home/itaymoav/dev/phpext/build $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)  -c /home/itaymoav/dev/phpext/build/entities.cpp -o entities.lo 
GoogleSet.lo: /home/itaymoav/dev/phpext/build/GoogleSet.cpp
    $(LIBTOOL) --mode=compile $(CXX)  -I. -I/home/itaymoav/dev/phpext/build $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)  -c /home/itaymoav/dev/phpext/build/GoogleSet.cpp -o GoogleSet.lo 
$(phplibdir)/entities.la: ./entities.la
    $(LIBTOOL) --mode=install cp ./entities.la $(phplibdir)

./entities.la: $(shared_objects_entities) $(ENTITIES_SHARED_DEPENDENCIES)
    $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_entities) $(ENTITIES_SHARED_LIBADD)

您必须检查
Makefile
及其包含的所有规则文件。查找将
.cpp
编译为
.o
的规则,并查看它对编译输出所做的过滤。如果它有意限制编译器的输出,以使普通的编译器不那么冗长,那么它可能会有一个标志,您可以设置该标志来覆盖它。Linux内核(以及许多相关的makefile)为此使用了
QUIET
标志,因此您可以执行
makequiet=''
来禁用简洁输出并查看所有内容


如果生成规则隐藏错误,则可能存在错误。如果你能找到它并将其添加到你的问题中,有人可能知道如何修复它。

你引用的那行不是真正的错误消息。这只是两行中的第一行。下面一行包含了真正有趣的东西


只有在极少数情况下,没有第二行,你才应该担心。因为后来有人包装了编译器以抑制它的一些错误消息。

它是由phpize/.configure自动生成的(我在这里提到过我是一个nub吗?)。我的观点是它是巨大的。这个问题与g++无关,而是您的makefile的问题。不幸的是,您没有包含正在剥离输出的生成文件部分,因此无法用给定的信息解决您的问题。@Loki Astari这是运行phpize+时获得的默认生成文件。配置不会改变我的看法。我们需要的makefile部分不在这里。此mkaefile可能包含在另一个makefile中。但是编译器调用的位不在这里,默认选项不会删除额外的输出。