QMakeãšå€§èŠæš¡ãããžã§ã¯ãã®éçº
âQMakeã§ã®ã³ãŒãå ±æã¯éåžžã«äžäŸ¿ã§ã
ããªãè€éãªã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãéåžžãããããå°ãããŠç®¡çãããããã£ã³ã¯ã«åå²ããã®ãæåã§ããããšãã°ãã©ã€ãã©ãªãæ¥ç¶ãããŠããã¡ã€ã³ã®å®è¡å¯èœãã¡ã€ã«ãšããŠã¢ããªã±ãŒã·ã§ã³ãæ瀺ããå¿ èŠãããå ŽåãQMakeã䜿çšãããšãããã¯ãã³ãã¬ãŒãã«åºã¥ããããžã§ã¯ãã䜿çšããŠã®ã¿å®è¡ã§ããŸã
subdirs
ãããã¯ãMyApp.pro
䜿çšããããã³ãã¬ãŒãã®ãšã³ããªãšãããžã§ã¯ããã©ã«ãã®ãªã¹ããå«ããããšãã°ååã®ä»ãããã¡ã€ã«ã§è¡šããããããžã§ã¯ãã§ãã
TEMPLATE = subdirs
SUBDIRS = \
src/app \ #
src/lib \
src/lib2
ãã®ã¢ãããŒãã§ã¯ãã³ãŒãã®å ±æãæŽçããå¿ èŠãããããã€ãã®ãµããããžã§ã¯ããèªç±ã«äœ¿çšã§ããŸããä»ã®ãããžã§ã¯ãã®ã©ãã§ããããŒãã¡ã€ã«ããœãŒã¹ã³ãŒããå«ããã¡ã€ã«ãæ€çŽ¢ããå¿ èŠãããããã³ã³ãã€ã©ã«éç¥ããã«ã¯ãå«ããå¿ èŠã®ããã©ã€ãã©ãªãšã³ã³ãã€ã«æžã¿ãã¡ã€ã«ãæ€çŽ¢ããå Žæã«é¢ããæ å ±ããªã³ã«ãŒã«éç¥ããå¿ èŠããããŸããQMakeã¯ããããžã§ã¯ãã«å«ãããã®ãèšè¿°ããããã ãã«äœ¿çšããã巚倧ãª.priãã¡ã€ã«ãäœæããããšã«ãã£ãŠãããè¡ããŸããããã¯ãéåžžã®C ++ãã¥ãŒæ§é ã䜿çšããã®ãšäŒŒãŠããŸã
#include <xyz.h>
ããã®çµæãããšãã°ããã¡ã€ã«ãMyProjectName.pri
ã³ã³ããžã·ã§ã³ã«å«ãŸããŠããããšããããMyProjectName.pro
ãŸãããŸããçžå¯Ÿãã¹ã®åé¡ãä¿®æ£ããã«ã¯ãçŸåšã®çµ¶å¯Ÿãã¹ãåè¡ã«è¿œå ããŸãã
âå€éšäŸåé¢ä¿
ããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã察象ãšããå€éšäŸåé¢ä¿ã®æäœã¯ãäž»ã«ã察å¿ããäŸåé¢ä¿ãžã®ãã¹ãã³ããŒããŠ.proãã¡ã€ã«ã«è²Œãä»ããããšã«ãªããŸããåOSã«ã¯ãã®ç¹ã§ç¬èªã®ç¹æ§ããããããããã¯éå±ã§éå±ãªäœæ¥ã§ããããšãã°ãLinuxã«ã¯åå¥ã®ãµããã©ã«ã
debug
ãšããããŸããrelease
ã
âCONFIG+ = orderedã¯ã³ã³ãã€ã«ããã©ãŒãã³ã¹ãã©ãŒã§ã
QMakeã®ãã1ã€ã®æ¬ ç¹ã¯ãã³ã³ãã€ã«ã®åé¡ãæç¶çã«çºçããããšã§ãããããã£ãŠããããžã§ã¯ãã«ä»ã®ãµããããžã§ã¯ãã§äœ¿çšãããã©ã€ãã©ãªã§ããå€ãã®ãµããããžã§ã¯ããããå Žåãã³ã³ãã€ã«ã¯å®æçã«å€±æããŸãããšã©ãŒã®çç±ã¯æ¬¡ã®ããã«ãªããŸãã
libA
ã©ã€ãã©ãªã¯ã©ã€ãã©ãªlibB
ãšã«äŸåããŸãlibC
ãããããçµã¿ç«ãŠã®æç¹ã§ã¯ãlibA
ã©ã€ãã©ãªlibC
ã¯ãŸã æºåãã§ããŠããŸãããéåžžããããžã§ã¯ããåã³ã³ãã€ã«ãããšåé¡ã¯è§£æ±ºããŸããããããããããŸã£ããèµ·ãã£ãŠãããšããäºå®ã¯ãQMakeã«æ·±å»ãªåé¡ãããããšã瀺ããŠããŸãããããŠããããã®åé¡ã¯ã次ã®ãããªãã®ã䜿çšããŠè§£æ±ºããããšã¯ã§ããŸããlibA.depends = libB
..ãããããïŒãããŠããããããã§ããïŒãç§ã¯äœãééã£ãããšãããŠããŸãããç§ãååãåé¡ã«å¯ŸåŠã§ããŸããã§ãããã©ã€ãã©ãªã®ãã«ãé åºã«é¢ããåé¡ã解決ããå¯äžã®æ¹æ³ã¯ãã«ã¹ã¿ãã€ãºã䜿çšããCONFIG += ordered
ããšã§ããããã®ããã䞊åãã«ãããªããããããã©ãŒãã³ã¹ã倧å¹
ã«äœäžããŸãã
QBSãšCMake
âQBSãCMakeã«è² ããã®ã¯ãªãã§ããïŒ
QBSïŒQtãã«ãã·ã¹ãã ãQtãã«ãã·ã¹ãã ïŒã®ãµããŒãçµäºã«ã€ããŠã®ã¡ãã»ãŒãžã¯ãç§ã«ãšã£ãŠæ¬åœã«ã·ã§ãã¯ã§ãããç§ã¯ãããå€ããè©Šã¿ã®åµå§è ã®äžäººã§ãããããŸããã QBSã¯ãQMLã³ãŒããæžããããšã®ãã人ãªã誰ã§ãç¥ã£ãŠããçŽ æŽãããæ§æã䜿çšããŠããŸãã CMakeã«ã€ããŠã¯åãããšã¯èšããŸãããããã®ãããžã§ã¯ããã«ãã·ã¹ãã ãæ°ãæ䜿çšããåŸãQBSããã®åãæ¿ããæ£ããå€æã§ãããCMakeãåŒãç¶ã䜿çšããããšã確信ã§ããŸãã ..ã
CMakeã«ã¯æ§æäžã®æ¬ é¥ãããã€ããããŸããã確å®ã«æ©èœããŸãããããŠãQBSã®åé¡ã¯æè¡çãšãããããæ¿æ²»çã§ãã
ããã¯ãQtã®ãµã€ãºïŒã³ãŒãã®è¡æ°ãšã©ã€ãã©ãªã®ãµã€ãºã®äž¡æ¹ã®ç¹ã§ïŒã«äžæºãæã£ãŠããããã°ã©ããŒã«ä»£æ¿æ¡ãæ¢ãããšã匷ããäž»ãªèŠå ã®1ã€ã§ããããã«ãå€ãã®äººãMOCã匷ãå«ã£ãŠããŸããããã¯ãQtã䜿çšããŠèšè¿°ãããC ++ã³ãŒããéåžžã®C ++ã«å€æããã¡ã¿ãªããžã§ã¯ãã³ã³ãã€ã©ã§ãããã®ã³ã³ãã€ã©ã®ãããã§ãããšãã°ãä¿¡å·ãæäœã§ãããããªäŸ¿å©ãªæ§é ã䜿çšã§ããŸãã
âQBSã®ä»£æ¿
QBSã«å ããŠãbuild2ãCMakeãMesonãSConsãªã©ã®ãããžã§ã¯ããã«ãã·ã¹ãã ãèªç±ã«äœ¿çšã§ããŸãããããã¯ãQtãšã³ã·ã¹ãã ã®å€éšã§ãå€ãã®ãããžã§ã¯ãã§äœ¿çšãããŠããŸãã
âIDEã§ã®QBSãµããŒããäžåå
ç§ã®ç¥ãéããQBSããµããŒãããIDEã¯QtCreatorã ãã§ãã
âvcpkgãšCMakeã®èŠäºãªçµå
äžèšã®å€éšäŸåé¢ä¿ã®åé¡ã«ã©ã®ããã«æ€æ šãããèŠããŠããŸããïŒãããã£ãŠãvcpkgããã±ãŒãžãããŒãžã£ãŒãç§ã«ã©ãã»ã©ååããªææ ãäžãããã¯é©ãããšã§ã¯ãããŸãããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããã«ã¯ã1ã€ã®ã³ãã³ãã§ååã§ããvcpkgã¯ã©ã®C ++ããã°ã©ããŒã«ã圹ç«ã€ãšæããŸãã
äžèŠé åçã§ãªãCMakeæ§æ
GoogleãèŠã€ããäžäœ10ã®ãªã³ã¯ããCMakeãå€æãããšãã·ã¹ãã ãéåžžã«é åã®ãªãæ§æã䜿çšããŠããããã«èŠããå ŽåããããŸããããããããã§ã®åé¡ã¯ãGoogleã2008幎ã®StackOverflowããå€ãCMakeã®ãã®ãæåã«è¡šç€ºããããšã§ããCMake2.8ããŒãžã§ã³ã®å€ãããã¥ã¡ã³ããžã®ãªã³ã¯ããããŸããCMakeã䜿çšãããšãã«äœ¿çšãããæ§æã¯ãããªããããã§ããå®éã®ãšãããCMakeã®äœ¿çšã«ã¯ãäž»ã«ä»¥äžã«ç€ºãæ§æã®äœ¿çšãå«ãŸããŸãïŒããã¯ãScreenPlayãããžã§ã¯ãã®CMakeList.txtãã¡ã€ã«ã®ççž®ããŒãžã§ã³ã§ãïŒã
#
cmake_minimum_required(VERSION 3.16.0)
# .
# ${PROJECT_NAME}
project(ScreenPlay)
# Qt, MOC
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
# - . src,
# . add_executable
set(src main.cpp
app.cpp
# -
src/util.cpp
src/create.cpp)
set(headers app.h
src/globalvariables.h
# -
src/util.h
src/create.h)
# Qt
qt5_add_big_resources(resources resources.qrc)
# CMake qml C++ release
# !
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(qml qml.qrc)
else()
qtquick_compiler_add_resources(qml qml.qrc )
endif()
# CMake . , , CMAKE_TOOLCHAIN_FILE
# !
find_package(
Qt5
COMPONENTS Quick
QuickCompiler
Widgets
Gui
WebEngine
REQUIRED)
# vcpkg
find_package(ZLIB REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(libzippp CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
# CMake :
# add_executable
# add_library
add_executable(${PROJECT_NAME} ${src} ${headers} ${resources} ${qml})
# Windows
# https://stackoverflow.com/questions/8249028/how-do-i-keep-my-qt-c-program-from-opening-a-console-in-windows
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
# .
# vcpkg.
# dll/lib/so/dynlib vcpkg/installed
# ,
# project(MyLib) target_link_libraries.
# .
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Quick
Qt5::Gui
Qt5::Widgets
Qt5::Core
Qt5::WebEngine
nlohmann_json::nlohmann_json
libzippp::libzippp
ScreenPlaySDK
QTBreakpadplugin)
# CMake build , .
# ${CMAKE_BINARY_DIR} - build!
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/assets/fonts)
configure_file(assets/fonts/NotoSansCJKkr-Regular.otf ${CMAKE_BINARY_DIR}/bin/assets/fonts COPYONLY)
å¿è ã¯CMakeãã¹ããŒãã¢ãã
CMakeã®åœ¹å²ã¯ãéçºè ãéžæãããããžã§ã¯ããã«ãã·ã¹ãã ã®åœä»€ãçæããããšã ãã§ããããã¯ãQtCreatorã§ã¯ãªãVisualStudioã䜿çšãã人ã ãšååããå Žåã«å€§ããªãã©ã¹ã«ãªãå¯èœæ§ããããŸããCMakeã䜿çšããå Žåãããã©ã«ãã®ãã«ãã·ã¹ãã ãšããŠNinjaãéžæã§ããŸãïŒéžæããå¿ èŠããããŸãïŒãCMake + Ninjaãã³ãã«ã䜿çšããŠãããžã§ã¯ããã³ã³ãã€ã«ããã®ã¯ãšãŠã䟿å©ã§ããã©ã¡ããQtMaintenanceããŒã«ããã¯ã¹ã«ãããŸããç¹ã«ããããã®ããŒã«ã¯ãå埩çãªéçºã¢ãããŒãã§å€æŽãéåžžã«è¿ éã«åŠçã§ããŸããå®éããã¹ãŠãéåžžã«é«éã«åäœãããããSConsã§Godotã䜿çšããå Žåã¯ãããã§ãCMakeã䜿çšããããšæããŸãã
Vcpkgã¯CMakeãèŒãããŸã
C ++ãããžã§ã¯ãã®äŸåé¢ä¿ã®ç®¡çã¯ç°¡åãªäœæ¥ã§ã¯ãããŸãããããã解決ããããã«ãå€ãã®ãããžã§ã¯ãã§ã¯ãå¿ èŠãªDLLãGitãªããžããªã«é 眮ããŠããŸããããã¯ãªããžããªã®ãµã€ãºãäžå¿ èŠã«å€§ãããããããããã¯æªãããšã§ãïŒããã§ã¯ãGit LFSã«ã€ããŠã¯è§ŠããŸããïŒã vcpkgã®å¯äžã®æ¬ ç¹ã¯ããã®ããã±ãŒãžãããŒãžã£ãŒãããã±ãŒãžã®ã°ããŒãã«ããŒãžã§ã³ã1ã€ãããµããŒãããªãããšã§ãïŒã€ãŸããç°ãªãããŒãžã§ã³ã®vcpkgãèªåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãããããã¯ã¡ãã£ãšããããã¯ã§ããããããå¿ èŠã«ãªãããšã¯ãã£ãã«ãããŸããïŒã確ãã«ããããžã§ã¯ãã®éçºèšç»ã§ã¯ããããæ£ããæ¹åã«é²ãã§ããããšãããããŸãã
次ã®ã³ãã³ãã䜿çšããŠããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
vcpkg install crashpad
èæ¬ã«åãçµãã§ããéãç§ãã¡ã¯ãåã«äœæinstall_dependencies_windows.batãšinstall_dependencies_linux_mac.shã¹ã¯ãªãããvcpkgãªããžããªã®ã¯ããŒã³ãäœæããã«ã¯ããããæ§ç¯ããããã«ããã¹ãŠã®ç§éã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸããQt Creatorã䜿çšããå Žåã¯ã
CMAKE_TOOLCHAIN_FILE
vcpkgãžã®çžå¯Ÿãã¹ã«æžã蟌ãå¿
èŠããããŸããããã«ãvcpkgã«ã¯ã䜿çšããŠããOSãšã¢ãŒããã¯ãã£ãéç¥ããå¿
èŠããããŸãã
# QtCreator. Extras -> Tools -> Kits -> -> CMake Configuration. :
CMAKE_TOOLCHAIN_FILE:STRING=%{CurrentProject:Path}/Common/vcpkg/scripts/buildsystems/vcpkg.CMake
VCPKG_TARGET_TRIPLET:STRING=x64-windows
ä»ã®ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããïŒãããè¡ãã«ã¯ããã©ãŒã ã®ã³ãã³ãã䜿çšããã ã
vcpkg install myLibToInstall
ã§ãã
çµæ
ææ°ã§æã人æ°ã®ãããã®ã䜿çšããã¢ãããŒãã«ã¯ããã®å©ç¹ããããŸããããããããšãã°ãQBSã®ãããªå€§ããªå¯èœæ§ãç§ããã·ã¹ãã ãæ§ç¯ãããšãã«ãçªç¶å芳è ã«ãªã£ãå Žåã¯ã©ãããã°ããã§ãããããæçµçã«ã¯ãéçºè èªèº«ããããžã§ã¯ãã§äœã䜿çšãããã決å®ããŸãããã®ããããããžã§ã¯ããCMakeã«ç§»ãããšã«ããŸããããããŠãç§ã¯èšããªããã°ãªããŸãããããã¯æ£ãã決æã§ãããä»æ¥ã2020幎ã«CMakeã¯ããªãè¯ãèŠããŸãã
CMakeãšvcpkgã䜿çšããŠããŸããïŒ