1. 준비

개발용 PC
  - Visual C++
  - Apache, PHP
  - PuTTY

VM Player (GuestOS = Linux)
  - autoconf, gcc 등의 개발도구
  - Apache, PHP
  - PHP 소스파일들
  - SSH, Samba (HostOS와 GuestOS 연결)
 


2. Host-Guest 연결
  - Linux의 Samba를 통해 네트워크 드라이브를 잡는다.
  - PuTTY를 이용해 SSH 접속.




3. 프로젝트 세팅
  - Linux의 PHP_SOURCE/ext 에서 ext_skel을 이용해 extension skeleton을 하나 생성. (메인소스는 .c 파일임)
  - Visual C++의 DLL 프로젝트의 경로를 Linux에서 생성한 extension skeleton으로 잡아 똑같은 이름의 프로젝트 생성.
  - Visual C++의 라이브러리 경로 등을 전부 네트워크 드라이브로 연결된 Linux쪽 PHP_SOURCE 경로로 설정
  - Visual C++ 프로젝트에서 생성된 cpp 파일을 제거
  - Linux의 .c 메인소스의 확장자를 .cpp 로 변경하고 config.m4 에서도 .cpp 로 변경.
  - Visual C++의 프로젝트에서 위에서 .cpp 로 변경한 메인소스를 추가.
  - 양쪽 프로젝트 모두 "stdafx.h" 를 include 하도록 하며 차이점은 #ifdef PHP_WIN32 로 세팅함.




4. 스크립트 준비
  - PuTTY 명령입력 프로그램 다운로드 후 어딘가에 저장  

SendPutty.exe 는 현재 실행 중인 모든 PuTTY를 뒤져서 첫번째 파라메터로 받은 문자열이 캡션에 있으면 두번째 파라메터의 명령어를 입력하는 프로그램

  - Linux 용 스크립트 (build.sh)
#!/bin/sh
/usr/local/apache/bin/apachectl stop ;
cd /PHP_SOURCE/ext/EXTENSION_DIR ;
make clean ;
phpize ;
./configure --with-php-config=/usr/local/php/bin/php-config --enable-EXTESNION_NAME ;
make ;
rm -rf /PHP_EXTENSION_PATH/EXTENSION_NAME.so ;
cp ./modules/EXTENSION_NAME.so /PHP_EXTENSION_PATH/ ;
/usr/local/apache/bin/apachectl start



  - Windows 용 스크립트 (build.bat)
copy "프로젝트경로\Debug\php_모듈명.dll" "C:\PHP_EXTENSION_경로\ext\" /y

"경로\SendPutty.exe" "root@localhost" "SCRIPT_PATH/build.sh"



  - 위에서 만든 스크립트는 전부 Windows에서 접근이 가능한 네트워크 경로에 두어야 함




5. 빌드
  - Visual C++ 프로젝트 설정창 > Build Events > Post-Build Event > Command Line 에서 네트워크경로\build.bat 를 등록


이제 Visual C++ 프로젝트를 빌드하면 Post-Build 에서 스크립트 파일이 돌아가면서 리눅스 쪽도 빌드됨.

Posted by bloodguy
,