macos - 如何完整且完整地配置 WxWidgets 的 CMake 安装/构建目录?
问题描述
我正在尝试将 WxWidgets (3.1.5) 集成到 macOS (10.15 [Catalina]) 上现有 CMake 项目的构建链 (CMake 3.21.2) 中,以使 WxWidgets 完全从属于主项目的 CMake 设置/变量(并且什么都没有项目的目录[我正在做源代码构建])。我正在努力控制 WxWidgets 的 CMake 脚本中的所有内容,但由于某种原因它仍然希望继续将库放入usr/local/lib
并在usr/local/bin
. 我不确定 WxWidgets CMake 构建脚本中缺少什么变量,因为所有内容都应该路由到我覆盖的位置。
这是我更改的相关文件和行。
CMakeLists.txt (WxWidgets Root, Lines 43 ~ 46 Original Lines )
set(wxSOURCE_DIR "path/to/my/project/libs/wxWidgets_src")
set(wxBINARY_DIR "path/to/my/project/build/libs/wxWidgets")
set(wxOUTPUT_DIR "${wxBINARY_DIR}/wxWidgets")
我也注释掉了该CMAKE_CONFIGURATION_TYPES
块,但这不会影响任何事情。
install.cmake (build/cmake/install.cmake, Lines 16 - 78 Original Lines )
wx_install(
DIRECTORY "${wxSOURCE_DIR}/include/wx"
DESTINATION "path/to/my/project/install/wxWidgets/include")
if(MSVC)
wx_install(
DIRECTORY "${wxSOURCE_DIR}/include/msvc"
DESTINATION "path/to/my/project/install/wxWidgets/include")
endif()
else()
wx_get_flavour(lib_flavour "-")
wx_install(
DIRECTORY "${wxSOURCE_DIR}/include/wx"
DESTINATION "path/to/my/project/install/wxWidgets/include/wx-${wxMAJOR_VERSION}.${wxMINOR_VERSION}${lib_flavour}")
endif()
# setup header and wx-config
if(WIN32_MSVC_NAMING)
wx_install(
DIRECTORY "${wxSETUP_HEADER_PATH}"
DESTINATION "path/to/my/project/install/wxWidgets/lib${wxPLATFORM_LIB_DIR}")
else()
wx_install(
DIRECTORY "${wxSETUP_HEADER_PATH}"
DESTINATION "path/to/my/project/install/wxWidgets/lib/wx/include")
wx_install(
FILES "${wxOUTPUT_DIR}/wx/config/${wxBUILD_FILE_ID}"
DESTINATION "path/to/my/project/install/wxWidgets/lib/wx/config"
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ
)
install(DIRECTORY DESTINATION "path/to/my/project/install/wxWidgets/bin")
# Disable symlinks
# install(CODE "execute_process( \
# COMMAND ${CMAKE_COMMAND} -E create_symlink \
# ${CMAKE_INSTALL_PREFIX}/lib/wx/config/${wxBUILD_FILE_ID} \
# ${CMAKE_INSTALL_PREFIX}/bin/wx-config \
# )"
# )
endif()
# uninstall target
if(MSVC_IDE)
set(UNINST_NAME UNINSTALL)
else()
set(UNINST_NAME uninstall)
endif()
if(NOT TARGET ${UNINST_NAME})
# these symlinks are not included in the install manifest
set(WX_EXTRA_UNINSTALL_FILES)
if(NOT WIN32_MSVC_NAMING)
if(IPHONE)
set(EXE_SUFFIX ".app")
else()
set(EXE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX})
endif()
set(WX_EXTRA_UNINSTALL_FILES
"path/to/my/project/install/wxWidgets/bin/wx-config"
"path/to/my/project/install/wxWidgets/bin/wxrc${EXE_SUFFIX}"
)
对于不影响 MacOS 构建的部分,某些编辑似乎过于热情,但我只是想确定一下。
我能找到的一些可疑目录工作正在进行的唯一其他迹象是在 config.cmake (第 140 ~ 150 行)中使用,wxBUILD_TOOLKIt
但是这个(在 toolkit.cmake 内部设置)似乎没有做任何相关的事情安装文件(它只是将其设置为osx-cocoa
, Lines 29 ~ 44)并且似乎与构建过程的库链接有关,与安装无关。
我不确定/usr/local
在安装过程中还有什么可能触及目录。这里的理想目标是 WxWidgets 不是我的项目单独构建的依赖项(即不要只是添加一些.dll/.dylib
文件和.h
文件然后离开),而是从源代码构建的完整子库(作为静态库或共享库)并在主项目自己的 CMake 构建链旁边完成(即我的项目的构建文件夹将驻留或安装目标将指向的位置)。我不想在项目目录之外泄漏任何东西(安装命令有点危险,因为它们可以将东西放在系统目录的深处)并且在任何 3rd 方库上运行 make 命令都是非常危险的,因为你从来没有真正知道东西的去向(即更改/创建了哪些目录、需要的权限、全局公开的库等)。
附言
以防万一,这就是我链接它的方式(是的,我知道它不合Modern CMake
规......它只是为了让它在此刻集成/工作):
来源/署名学分:doxygen/overviews/cmake.md,第 114 ~ 126 行
# WxWidgets
add_subdirectory("path/to/my/project/libs/wxWidgets_src")
target_link_libraries(MyExe PUBLIC wx::net wx::core wx::base)
解决方案
推荐阅读
- javascript - Require.context 正则表达式问题
- javascript - React 页面每秒无限刷新页面
- javascript - mongoose中未定义递归嵌套模型的最优解
- selenium-webdriver - 如何在屏幕上打开和查看运行 PHPUnit + Selenium (webdriver) 测试的浏览器?
- node.js - 如何从 node.js 控制台中运行 javascript?
- php - PHP 启动:无法加载动态库 mbstring,即使 mbstring 存在于 ext 文件夹中
- java - 业务层和表示层之间的依赖注入
- python - 无法导入名称“tf2”
- ads - 观看奖励广告后访问广告商网站
- java - 根据固定 div 当前结束的内容更改背景颜色