2016/11/03

Using CEF(Chromium Embedded Framework) with MFC Part1

Using CEF(Chromium Embedded Framework) with MFC Part1

MFC를 이용하여 Application을 만들 때 Windows 기본 브라우저 말고 크롬을 올리기 위해 방법을 찾아 보았다.
Chromium Embedded Framework(이하 CEF) 라는 프로젝트를 찾았고 현재 버전 3까지 나와 있다. CEF를 MFC 프로젝트에 사용을 하려면 libcef_dll_wrapper.dll을 만들어야 한다.
이때, 컴파일러 옵션중 Runtime Library 설정에 따라 사용할 수 있는 libcef_dll_wrapper.dll을 만들어야 한다. 라이브러리를 만들 때 Sandbox 사용 설정 여부에따라 만들어진 라이브러리의 사용에 제한이 있는 것 같았다. 우선 Sandbox 설정을 제외하고 빌드 해 보았다.
빌드를 하는 방법은 어렵지 않으나 나중에 참고하기 위해 정리를 하였다.

libcef_dll_wrapper.dll를 만들기 위해서는 CEF Automated Builds 사이트(http://opensource.spotify.com/cefbuilds/index.html)에서 소스를 다운 받는다. 그리고 빌드 환경을 구성할 CMake 를 준비한다.
글을 작성하는 현재 버전은 CEF 3.2840.1512.g3f66e81(Chromium 54.0.2840.59) 이고, 빌드에 사용된 버전은 CEF 3.2840.1511.gb345083(Chromium 54.0.2840.59) 이다.
사용하고자 하는 버전과 일치하는 Standard Distribution 을 다운 받아 압축을 해제한다.
CMake를 실행하여 소스 경로에 압축을 해제한 경로를 설정하고 Build the binaries 경로에 프로젝트를 생성한 경로를 설정한고 Configure를 신행한다.
많은 설정 중 마지막에 있는 USE_OFFICIAL_BUILD_SANDBOX, USE_SANDBOX 설정을 해제한다.
해제하지 않을 경우 만들어 지는 프로젝트는 Runtime Library 옵션이 /MT 로 고정이 된다. 다른 옵션을 만들어 테스트해 보았지만 기존의 만들어진 cef_sandbox 라이브러리가 /MT 옵션으로 고정되어 있어서인지 다른 설정으로 바꾸면 프로젝트를 빌드 할 때 링크 에러가 발생하여고 빌드가 되지 않았다.
Sandbox를 사용하지 않는 경우에는 여러 Runtime Library에 대한 사용에 문제가 없었다. Sandbox 이용에 대해서는 나중에 좀 더 확인을 해 봐야겠다.
설정을 마치고 Configure 를 실행 한 후 Generate를 실행하여 프로젝트를 생성한다.

그리고 Build the binaries 경로에있는 cef.sln 을 Visual Studio로 열어 libdef_dll_wrapper 프로젝트의 속성 페이지를 열어 추가하고자 하는 프로젝트와 동일한 Runtime Library 옵션을 선택하고 빌드한다.
본인의 경우 /MD /MDd /MT /MTd 옵션을 각각 설정하고 출력 파일 이름을 달리하여 추후 사용할 때 골라서 사용할 수 있도록 빌드하였다. 그래서 만들어진 파일이 아래 파일들이다.
libcef_dll_wrapper_mtd.pdb
libcef_dll_wrapper_mdd.lib
libcef_dll_wrapper_mtd.lib
libcef_dll_wrapper_mdd.pdb
libcef_dll_wrapper_mt.lib
libcef_dll_wrapper_md.lib

이 파일들을 이용하여 MFC 프로젝트에 CEF를 사용하면 된다.

4 comments :

  1. CMake에서 Configure 버튼 누르면 아래와 같은 에러 메시지가 발생합니다.

    CMake Error at libcef_dll/CMakeLists.txt:20:
    Parse error. Expected a command name, got unquoted argument with text
    "{{".

    해당 부분의 코드는 아래와 같습니다.
    set(CEF_TARGET libcef_dll_wrapper)

    {{
    'prefix': 'libcef',
    'library': '${CEF_TARGET}',
    'append_macro': 'LIBCEF_APPEND_PLATFORM_SOURCES',
    'includes': [
    'includes_common',
    'autogen_cpp_includes',
    'includes_capi',
    'autogen_capi_includes',
    'includes_wrapper',
    'includes_win:WINDOWS',
    'includes_mac:MACOSX',
    'includes_linux:LINUX',
    'libcef_dll_wrapper_sources_base',
    'libcef_dll_wrapper_sources_common',
    'autogen_client_side',
    ],
    }}

    파싱 오류를 어떻게 해결하셨는지 문의드립니다.

    ReplyDelete
    Replies
    1. 스스로 해결하면 한단계 발전할 것 입니다.

      Delete
  2. CEF Automated Builds 사이트(http://opensource.spotify.com/cefbuilds/index.html) 사이트가 없데요. 어디서 받나요?

    ReplyDelete
    Replies
    1. 구글에 검색만해봐도 바뀐 주소 나오는데 너무한거 아닌가요?

      Delete