7

如何通过 CMAKE 将链接器标志“DEF”和“NODEFAULTLIB”添加到 vs2012 项目?

4

2 回答 2

12

您可以将它们附加到CMAKE_EXE_LINKER_FLAGS

if(MSVC)
  set(CMAKE_EXE_LINKER_FLAGS
      "${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def /NODEFAULTLIB")
endif()
于 2013-09-13T18:45:04.993 回答
2

一般的方法是将链接器标志添加到CMAKE_xxx_LINKER_FLAGS,是的。但是在使用CMAKE_SHARED_LINKER_FLAGSand/DEF:参数的情况下,有一个特殊情况让我遇到了麻烦。

如果您已经使用CMAKE_EXPORT_ALL_SYMBOLS( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS),则该/DEF:参数将不会出现在链接命令中,即使您在CMAKE_SHARED_LINKER_FLAGS.

这是因为 MSVC 链接器只接受一个/DEF:参数,而 CMake 不想用您在./DEF:<build_path>/exports.defCMAKE_EXPORT_ALL_SYMBOLSCMAKE_SHARED_LINKER_FLAGS

您也可以使用CMAKE_CXX_STANDARD_LIBRARIES. 它添加任意链接器标志而不检查它们,但是它将它们添加到链接命令的中间之前,/DEF:<build_path>/exports.def以便后者不会被覆盖。

此处对此案例的完整讨论:https ://cmake.org/pipermail/cmake-developers/2019-November/031274.html 。

于 2019-11-11T12:57:05.093 回答