【问题标题】:How to add command line options for mingw32-make from CMakeLists.txt?如何从 CMakeLists.txt 为 mingw32-make 添加命令行选项?
【发布时间】:2021-05-23 05:32:39
【问题描述】:

我正在尝试使用 curses 构建一个小的跨平台应用程序。要跨平台使用 curses,我使用来自 this answer 的说明。它几乎可以工作,除了在 Windows 上(运行时 cmake -G "MinGW Makefiles" .. && cmake --build . 来自我的构建文件夹),我收到一堆关于 PCONSOLE_SCREEN_BUFFER_INFOEX 未定义的错误。为了修复这个错误,pdcurses 说在mingw32-make 调用中设置INFOEX=N。我可以使用mingw32-make -f Makefile INFOEX=N 很好地编译它,但我不知道如何从CMakeLists.txt 传递INFOEX=N

【问题讨论】:

标签: c++ cmake pdcurses


【解决方案1】:

快速搜索存储库表明该值仅用于添加HAVE_NO_INFOEX 编译器定义。为了允许用户在配置项目时传递配置,您应该添加一个缓存变量,允许在配置项目时传递值(cmake -D VARIABLE_NAME=VALUE -G "MinGW Makefiles" ..)。

调整链接答案中显示的CMakeLists.txt 文件,可以这样完成:

...

if (WIN32)
    # variable set to False unless provided by user
    set(PDCURSES_INFOEX_MISSING False CACHE BOOL "Does pdcurses need to define CONSOLE_SCREEN_BUFFER_INFOEX?")
endif()

add_library(PDcurses
         # all of the sources
         ...
)

if (WIN32 AND PDCURSES_INFOEX_MISSING)
    target_compile_definitions(PDcurses PRIVATE HAVE_NO_INFOEX)
endif()

...
cmake -D PDCURSES_INFOEX_MISSING=True -G "MinGW Makefiles" ..

注意:如果您想避免要求用户做出此选择并可能出错,您也可以使用try_compile 来检查,包括windows.h 和使用CONSOLE_SCREEN_BUFFER_INFOEX 的源代码对于Windows 目标系统是否可以编译...

【讨论】:

  • 感谢您的回答,但我设法以不同的方式解决了我的问题。虽然这可能确实有效,但我意识到我问的是一个 XY 问题,而是以“常规”方式将稍旧版本的 pdcurses 安装到 MinGW 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2011-08-25
相关资源
最近更新 更多