编译QCefView+VS2019+QT5.15.2

Posted yantuguiguziPGJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译QCefView+VS2019+QT5.15.2相关的知识,希望对你有一定的参考价值。

目录

一  编译结果

二  编译要点

 三  cmake部署qt方法

四  参考链接


一  编译结果

链接:https://pan.baidu.com/s/1ehk2cD8xnWqLihROxi9ZsQ 
提取码:gwi1 

 

二  编译要点

找到子模块,并安装cef库

库链接:

CEF Automated Builds

最后运行:generate-win-proj.bat

 

 

 三  cmake部署qt方法

cmake_minimum_required(VERSION 3.4.1)
project(QCefViewTest)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Widgets REQUIRED)
find_package(Qt$QT_VERSION_MAJOR COMPONENTS Core Gui Widgets REQUIRED)

get_target_property(_qmake_executable Qt$QT_VERSION_MAJOR::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "$_qmake_executable" DIRECTORY)

if (OS_WINDOWS)
  find_program(DEPLOYQT_EXECUTABLE windeployqt HINTS "$_qt_bin_dir")
elseif (OS_MACOS)
  find_program(DEPLOYQT_EXECUTABLE macdeployqt HINTS "$_qt_bin_dir")
elseif (OS_LINUX)
elseif (OS_MACOS)
else()
endif()

include_directories(
  $CMAKE_SOURCE_DIR/include
)

file(GLOB_RECURSE _SRC_FILES
  "*.h"
  "*.cpp"
)

file(GLOB_RECURSE _UI_FILES
  "*.ui"
)
source_group("Form Files" $_UI_FILES)

configure_file(index.in.html webres/index.html COPYONLY)
configure_file(tutorial.in.html webres/tutorial.html COPYONLY)

file(GLOB_RECURSE _WEB_FILES 
  "*.html"
)
source_group("Webres Files" $_WEB_FILES)

if (OS_WINDOWS)
  file(GLOB_RECURSE _RES_FILES
    "*.qrc"
    "*.rc"
  )
  source_group("Resource Files" $_RES_FILES)

  add_executable($PROJECT_NAME WIN32 
    $_SRC_FILES
    $_UI_FILES
    $_RES_FILES
    $_WEB_FILES
  )

  target_link_libraries($PROJECT_NAME
    PRIVATE
      QCefView
  )

  target_compile_definitions($PROJECT_NAME PRIVATE
    UNICODE
    _UNICODE
  )

  set_property(DIRECTORY $CMAKE_CURRENT_SOURCE_DIR
    PROPERTY 
      VS_STARTUP_PROJECT $PROJECT_NAME
  )

  set_target_properties($PROJECT_NAME 
    PROPERTIES
      VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:$PROJECT_NAME>"
  )

  add_custom_command(TARGET $PROJECT_NAME POST_BUILD
    # Embed the manifest file into the target
    COMMAND mt.exe 
      -manifest \\"$CMAKE_CURRENT_SOURCE_DIR\\\\$PROJECT_NAME.manifest\\" 
      -inputresource:\\"$<TARGET_FILE:$PROJECT_NAME>\\" 
      -outputresource:\\"$<TARGET_FILE:$PROJECT_NAME>\\"
    
    # Copy the webres directory to output folder
    COMMAND $CMAKE_COMMAND -E copy_directory 
      $CMAKE_CURRENT_BINARY_DIR/webres 
      $<TARGET_FILE_DIR:$PROJECT_NAME>/webres
    
    # Deploy the Qt Application
    COMMAND $DEPLOYQT_EXECUTABLE 
      --no-svg 
      --no-translations 
      --no-compiler-runtime 
      $<TARGET_FILE:$PROJECT_NAME>
  )
endif() # OS_WINDOWS

if (OS_LINUX)
  file(GLOB_RECURSE _RES_FILES
    "*.qrc"
  )
  source_group("Resource Files" $_RES_FILES)

  add_executable($PROJECT_NAME 
    $_SRC_FILES
    $_UI_FILES
    $_RES_FILES
    $_WEB_FILES
  )

  set_target_properties($PROJECT_NAME 
    PROPERTIES 
      INSTALL_RPATH "$ORIGIN"
      BUILD_WITH_INSTALL_RPATH TRUE
  )

  target_link_libraries($PROJECT_NAME
    PRIVATE
      # On linux platform and debug mode, libcef.so MUST be loaded before libc.so.
      # Gnerally we can achive this by using LD_PRELOAD=libcef.so, but this is not 
      # convenience for debugging. 
      # Thus, here we do a trick to make sure the load order
      "-Wl,--no-as-needed $<TARGET_FILE_DIR:QCefView>/$<TARGET_FILE_NAME:libcef_lib>"

      QCefView
  )

  add_custom_command(TARGET $PROJECT_NAME POST_BUILD
    # Copy the webres directory to output folder
    COMMAND $CMAKE_COMMAND -E copy_directory 
      $CMAKE_CURRENT_BINARY_DIR/webres 
      $<TARGET_FILE_DIR:$PROJECT_NAME>/webres

    # Deploy the Qt Application
    # COMMAND $DEPLOYQT_EXECUTABLE 
    # --no-svg 
    # --no-translations 
    # --no-compiler-runtime 
    # $<TARGET_FILE:$PROJECT_NAME>
  )
endif() # OS_LINUX

if (OS_MACOS)
  file(GLOB_RECURSE _RES_FILES
    "*.qrc"
  )
  source_group("Resource Files" $_RES_FILES)

  set(QCefViewTest_INFO_PLIST_FILE 
    "$CMAKE_CURRENT_LIST_DIR/mac/Info.plist"
  )
  
  add_executable($PROJECT_NAME MACOSX_BUNDLE 
    $_SRC_FILES
    $_UI_FILES
    $_RES_FILES
    $_WEB_FILES
  )

  set_target_properties($PROJECT_NAME 
    PROPERTIES 
      ARCHIVE_OUTPUT_DIRECTORY                  "$CMAKE_ARCHIVE_OUTPUT_DIRECTORY/demo"
      LIBRARY_OUTPUT_DIRECTORY                  "$CMAKE_LIBRARY_OUTPUT_DIRECTORY/demo"
      RUNTIME_OUTPUT_DIRECTORY                  "$CMAKE_RUNTIME_OUTPUT_DIRECTORY/demo"
      CLANG_ENABLE_OBJC_ARC                     "YES"
      MACOSX_BUNDLE_INFO_PLIST                  "$QCefViewTest_INFO_PLIST_FILE"
      XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS   "@executable_path/../Frameworks"
      XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.cefview.qcefviewtest"
      XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
  )

  add_custom_command(TARGET $PROJECT_NAME 
    POST_BUILD

    # remove the old framework from the bundle if exists
    COMMAND rm -fr "$<TARGET_BUNDLE_CONTENT_DIR:$PROJECT_NAME>/Frameworks/QCefView.framework"

    # copy the latest framework to the bundle
    COMMAND $CMAKE_COMMAND -E copy_directory
        "$<TARGET_BUNDLE_DIR:$PROJECT_NAME>/../../QCefView.framework"
        "$<TARGET_BUNDLE_CONTENT_DIR:$PROJECT_NAME>/Frameworks/QCefView.framework"

    # copy the webres to the bundle
    COMMAND $CMAKE_COMMAND -E copy_directory
       "$CMAKE_CURRENT_BINARY_DIR/webres"
       "$<TARGET_BUNDLE_CONTENT_DIR:$PROJECT_NAME>/Resources/webres"

    # deploy the Qt Application
    COMMAND $DEPLOYQT_EXECUTABLE 
       "$<TARGET_BUNDLE_DIR:$PROJECT_NAME>"
       "-codesign=-"

    VERBATIM
  )

  find_library(COCOA_FRAMEWORK Cocoa)
  find_library(APPKIT_FRAMEWORK Appkit)
  target_link_libraries($PROJECT_NAME 
    PRIVATE
      $<TARGET_FILE:QCefView>
      $COCOA_FRAMEWORK
      $APPKIT_FRAMEWORK
  )
endif()

set_target_properties($PROJECT_NAME 
  PROPERTIES
    FOLDER example
)

target_link_libraries($PROJECT_NAME
  PRIVATE
    Qt$QT_VERSION_MAJOR::Core
    Qt$QT_VERSION_MAJOR::Gui
    Qt$QT_VERSION_MAJOR::Widgets
)

四  参考链接

CefView/QCefView: A Qt Widget encapsulated CEF view based on QWidget (github.com)

https://github.com/winsoft666/QCefWidget

以上是关于编译QCefView+VS2019+QT5.15.2的主要内容,如果未能解决你的问题,请参考以下文章

VS2019编译VTK-9.1.0+Qt5.15.2

三战VS2019编译VTK7.1+Qt5.15.2

三战VS2019编译VTK7.1+Qt5.15.2

初步编译QT5.15.2+VS2019+VTK8.2.0

初步编译QT5.15.2+VS2019+VTK8.1.0

VS2019编译VTK-9.1.0+Qt5.15.2