【问题标题】:Unable to include compile flag with CMAKE 3.15.0 [duplicate]无法在 CMAKE 3.15.0 中包含编译标志 [重复]
【发布时间】:2019-06-18 17:29:56
【问题描述】:

我能够通过 windows 命令提示符成功编译和执行一个包含 boost 库的示例 C++ 程序。

我想使用 make,因此我想将 CMAKE(3.15) 与 MinGW g++ 一起使用。

我在 cmd 提示符下使用了 cmake-gui、CLION 和 cmake

很遗憾,我找不到 CMakeLists.txt 中包含的编译器标志“-lws2_32”

我在 StackOverflow 上找到了不同的解决方案,但没有一个对我有帮助。

下面是 CMakeLists.txt

    cmake_minimum_required (VERSION 3.14.0)
    project (BoostCMakeTutorial)
    set(GCC_BOOST_COMPILER_FLAG "-lws2_32")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_BOOST_COMPILER_FLAG}")
    add_executable(BoostCMakeTutorial boostTcpClient.cpp)

我确定 CMAKE 中缺少“-lws2_32”标志,因为当不包含该标志时,我在 cmd 提示符上看到相同的错误

【问题讨论】:

  • 您是否通过打印变量 CMAKE_CXX_FLAGS 来验证标志已添加到 CMake 中?您是否尝试使用VERBOSE=1 运行make 以查看标志确实丢失了?你能发布你看到的确切错误吗?
  • @squareskittles :我尝试使用VERBOSE=1,但没有用。在cmake-gui 中,CMAKE_CXX_FLAGS 字段为空。我手动添加它然后生成。 -lws2_32 不见了。
  • @squareskittles :我也尝试在link 之后使用target_link_libraries,但是在cmake-gui 中打开CMakeLists.txt 会因此而弹出错误。
  • “但没用” - 这是什么意思? VERBOSE 命令不起作用?或者它表明-lws2_32 标志丢失了?
  • 请编辑您的帖子以显示您在使用target_link_libraries 时尝试的完整命令,以及您遇到的错误。

标签: c++ boost makefile cmake


【解决方案1】:

要在现代 CMake 中添加 -lws2_32 链接器标志,最好的方法是使用 target_link_libraries。我在下面更新了您的示例:

cmake_minimum_required (VERSION 3.14.0)
project (BoostCMakeTutorial)
add_executable(BoostCMakeTutorial boostTcpClient.cpp)
target_link_libraries(BoostCMakeTutorial ws2_32)

【讨论】:

  • 你能不能把target_link_libraries(BoostCMakeTutorial w2_32)改成target_link_libraries(BoostCMakeTutorial ws2_32),这可能有助于下次搜索人
  • 遗漏了那个错字,已修复!
  • 如果我交换 add_executable(BoostCMakeTutorial boostTcpClient.cpp) target_link_libraries(BoostCMakeTutorial w2_32) 这些行会给出错误,我错过了,非常感谢 squareskittles
  • 是的,您必须先使用add_executable 命令定义您的可执行文件BoostCMakeTutorial,然后才能在target_link_libraries 命令中引用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多