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

时间:2011-10-19 18:36:23

标签: c++ debugging makefile php-extension

我在CPP代码上运行make命令。我收到如下错误消息: /home/itaymoav/dev/phpext/sitel/build/entities.cpp: In function ‘void googleset_free_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)

2 个答案:

答案 0 :(得分:0)

您必须检查Makefile及其包含的所有规则文件。找到将.cpp编译为.o的规则,看看它在编译输出上进行了哪种过滤。如果它故意限制编译器的输出以使正常编译更简洁,那么它可能会设置一个标志来覆盖它。 Linux内核(以及许多相关的Makefile)为此目的使用QUIET标志,因此您可以make QUIET=''禁用简洁输出并查看所有内容。

如果构建规则隐藏错误,则可能存在错误。如果你能找到它并将其添加到你的问题,有人可能知道如何解决它。

答案 1 :(得分:0)

您引用的行不是真正的错误消息。这只是两条线中的第一条。以下行包含非常有趣的内容。

只有在极少数情况下不是第二行才应该担心。因为那时有人包装了编译器来抑制它的一些错误信息。