Неожиданное поведение от вызова make (windows) под-nmake

Создаю make-файл для сборки openssl для Windows, и я сталкиваюсь с тем, что меня озадачило. Я хочу, чтобы он был построен с одним вызовом, предоставляя платформу для сборки. Существует родительский make-файл, который вызывает суб-make с набором нескольких параметров в зависимости от платформы (linux, win32, win64, win64debug и т. Д.).

Раздел sub-makefile для Windows выглядит следующим образом:

winConfig: patch.tmp
    cd $(BUILD_HOME)/openssl-$(VERSION) ; \
    $(CHMOD) -R 777 * ; \
    perl Configure $(PERL_CFG_TARGET) $(CFG_BASEOPTS) ; \
    [ $(CFG_BITS) = 32 ] && ms/do_ms.bat ; \
    [ $(CFG_BITS) = 64 ] && ms/do_win64a.bat
    $(TOUCH) cfg-win$(CFG_BITS)$(CFG_DEBUG).tmp cfg.tmp
    $(TOUCH) winConfig

winBuild: winConfig remakeDirs
    cd $(BUILD_HOME)/openssl-$(VERSION) ; \
    env -u MAKE -u MAKEFLAGS nmake -f ms/nt.mak install ; \
    $(CP) crypto/ec/ec_lcl.h crypto/ecdsa/ecs_locl.h $(OPENSSL_INSTALL_DIR)/include/openssl/
    $(TOUCH) winBuild

winPkg: winConfig winBuild
    $(RM) $(TARGET_HOME)/$(OPENSSL_TARBALL)
    $(TAR) -C $(OPENSSL_INSTALL_BASE) -cf $(TARGET_HOME)/$(OPENSSL_TARBALL) $(OPENSSL_INSTALL_TARGET)
    $(GZIP) -f $(TARGET_HOME)/$(OPENSSL_TARBALL)
    $(RM) $(OPENSSL_INSTALL_DIR)
    $(TOUCH) winPkg

## build and install for Windows:
all-win: winPkg

Несколько переменных установлены в верхней части, и, кажется, все работает нормально. У меня есть две проблемы:

  1. В цели winbuild я получаю жалобы на то, что env не найден, однако nmake не запустится, пока я не выполню команду env. Weird?

  2. Это тот, который действительно озадачил меня. Строки nmake отображаются в фоновом режиме. Я говорю это потому, что я нахожу в выводе команду copy, за которой быстро следуют команды tar + gzip... пока компиляция только началась. Полученный архив, созданный примерно за 10 минут до завершения сборки, имеет только структуру каталогов папки установки и два файла, на которые имеются ссылки.

Как я могу завершить этот процесс синхронно, не прибегая к сборке и тарированию отдельно?

РЕДАКТИРОВАТЬ: Обновленный образец Makefile выше.

Звонок через:

make -f openssl.mf win64

где openssl.mf содержит:

win64:
    make -j 1 -f openssl-sub.mf all-win CC=cl  CXX=cl  OUTPATH=out64  CFG_TARGET=VC-WIN64A 

Он продолжает вызывать nmake в фоновом режиме, а затем приступает к созданию довольно пустого каталога. Совсем не то, чего я хочу достичь. Я хотел бы, чтобы процесс make сидел и ждал, пока nmake вернется... это возможно?

Ошибочный вывод:

cd L:/dev/openssl/openssl-build/openssl-1.0.1l ; \
        env -u MAKE -u MAKEFLAGS nmake -f ms/nt.mak install ; \
        L:/wintools/cygwin/cp -f crypto/ec/ec_lcl.h crypto/ecdsa/ecs_locl.h L:/dev/openssl/openssl-install/win64-x86/include/openssl/

Microsoft (R) Program Maintenance Utility Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

Building OpenSSL
        perl util/mkdir-p.pl "tmp32"
created directory `tmp32'
        perl util/mkdir-p.pl "out32"
created directory `out32'
        perl util/mkdir-p.pl "inc32"
created directory `inc32'
        perl util/mkdir-p.pl "inc32\openssl"
L:/wintools/cygwin/touch winBuild
created directory `inc32/openssl'
        perl util/copy.pl ".\.\e_os.h" "tmp32\e_os.h"
Copying: ././e_os.h to tmp32/e_os.h
        perl util/copy.pl ".\crypto\cryptlib.h" "tmp32\cryptlib.h"
Copying: ./crypto/cryptlib.h to tmp32/cryptlib.h
        perl util/copy.pl ".\crypto\buildinf.h" "tmp32\buildinf.h"
Copying: ./crypto/buildinf.h to tmp32/buildinf.h
        perl util/copy.pl ".\crypto\md32_common.h" "tmp32\md32_common.h"
Copying: ./crypto/md32_common.h to tmp32/md32_common.h
        perl util/copy.pl ".\crypto\o_time.h" "tmp32\o_time.h"

Copying: ./crypto/o_time.h to tmp32/o_time.h
L:/wintools/rm -rf /dev/openssl/packages/win64-x86-openssl-1.0.1l.tar
        perl util/copy.pl ".\crypto\o_str.h" "tmp32\o_str.h"
L:/wintools/Gow/bin/tar.exe -C L:/dev/openssl/openssl-install -cf /dev/openssl/packages/win64-x86-openssl-1.0.1l.tar win64-x86
Copying: ./crypto/o_str.h to tmp32/o_str.h
        perl util/copy.pl ".\crypto\o_dir.h" "tmp32\o_dir.h"
Copying: ./crypto/o_dir.h to tmp32/o_dir.h
        perl util/copy.pl ".\crypto\constant_time_locl.h" "tmp32\constant_time_locl.h"
Copying: ./crypto/constant_time_locl.h to tmp32/constant_time_locl.h
        perl util/copy.pl ".\crypto\md4\md4_locl.h" "tmp32\md4_locl.h"
L:/wintools/cygwin/gzip -f /dev/openssl/packages/win64-x86-openssl-1.0.1l.tar
Copying: ./crypto/md4/md4_locl.h to tmp32/md4_locl.h
        perl util/copy.pl ".\crypto\md5\md5_locl.h" "tmp32\md5_locl.h"
Copying: ./crypto/md5/md5_locl.h to tmp32/md5_locl.h
        perl util/copy.pl ".\crypto\sha\sha_locl.h" "tmp32\sha_locl.h"
gzip: /dev/openssl/packages/win64-x86-openssl-1.0.1l.tar: No such file or directory
make[1]: *** [winPkg] Error 1
make[1]: Leaving directory `L:/dev/openssl'
make: *** [win64] Error 2

Вы можете видеть внизу, где команда tar из winPkg была введена до завершения winbuild.

0 ответов

Другие вопросы по тегам