1. 多配置生成器(Visual Studio, Xcode, Ninja Multi-Config) 输出目录禁止自动添加子目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
改成
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<0:>")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<0:>")
效果:
变为
2. CMake使用Windows系统内其他版本(非最新版)msvc编译器时出现rc.exe找不到的问题
复现条件:Windows中同时安装了多个工具集,而当前项目需要用到旧的工具集,且使用的构建工具非Visual Studio(可能是ninja或Makefile,Visual Studio作为工具集去进行CMake配置的话一般不会出现这个问题)。
CMake输出情况:
解决办法:
- 在
project
命令前添加以下命令(地址根据实际情况修改) :set(ENV{Path} "$ENV{Path};C:/Program Files (x86)/Windows Kits/8.1/bin/x86")
- 在
project
命令之后添加以下命令(地址根据实际情况修改):set(CMAKE_RC_COMPILER "C:/Program Files (x86)/Windows Kits/8.1/bin/x86/rc.exe")
修改完大致如下:
cmake_minimum_required(VERSION 3.21)
set(ENV{Path} "$ENV{Path};C:/Program Files (x86)/Windows Kits/8.1/bin/x86") # 第一步
project(test1 CXX C)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<0:>")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<0:>")
set(CMAKE_RC_COMPILER "C:/Program Files (x86)/Windows Kits/8.1/bin/x86/rc.exe") #第二步
add_subdirectory(src)
...
最后,清空构建目录,重新构建,问题应该解决了,如还没解决,留言一下,我尝试帮忙解决。
3. Msys2的MinGW下安装的wxWidgets无法使用问题
CMake脚本:
find_package(wxWidgets 3.2 REQUIRED COMPONENTS core base)
if (wxWidgets_USE_FILE) # not defined in CONFIG mode
include(${wxWidgets_USE_FILE})
endif ()
add_executable(wxTest main.cpp)
执行后会出现(为方便调试,我使用了CLion):
CMake Error at D:/Program Files/JetBrains/CLion 2022.2.1/bin/cmake/win/x64/share/cmake-3.25/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
wxWidgets_INCLUDE_DIRS) (Required is at least version "3.2")
Call Stack (most recent call first):
D:/Program Files/JetBrains/CLion 2022.2.1/bin/cmake/win/x64/share/cmake-3.25/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
D:/Program Files/JetBrains/CLion 2022.2.1/bin/cmake/win/x64/share/cmake-3.25/Modules/FindwxWidgets.cmake:977 (find_package_handle_standard_args)
CMakeLists.txt:22 (find_package)
图片如下:
根据我的跟踪调试,发现其主要原因是 Windows无法找到shell命令,也就是说,需要把MSYS2的/usr/bin
加入环境变量。可以看下面这张图:
可以看出,这句命令的输出结果是:系统找不到指定的文件。很明显,Windows找不到 sh
这个命令。
CMake更改后如下:
set(ENV{PATH} "$ENV{PATH};D:/Programs/msys64/usr/bin") #根据大家的实际情况设置位置
find_package(wxWidgets 3.2 REQUIRED COMPONENTS core base)
if (wxWidgets_USE_FILE) # not defined in CONFIG mode
include(${wxWidgets_USE_FILE})
endif ()
add_executable(wxTest main.cpp)
至此,该问题解决,我使用 “pacman -Ss ${MINGW_PACKAGE_PREFIX}-wxwidgets3.2-msw” 安装的 wxwidgets3.2
总算是用上了。