CMAKE for / DEF和/ NODEFAULTLIB

时间:2013-09-13 12:46:24

标签: visual-studio-2012 cmake linker-flags

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

2 个答案:

答案 0 :(得分:9)

您可以将它们附加到CMAKE_EXE_LINKER_FLAGS

if(MSVC)
  set(CMAKE_EXE_LINKER_FLAGS
      "${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def /NODEFAULTLIB")
endif()

答案 1 :(得分:1)

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

如果您已经使用CMAKE_EXPORT_ALL_SYMBOLSCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS),则/DEF:参数将不会出现在链接命令中,即使您在CMAKE_SHARED_LINKER_FLAGS中进行了指定。

这是因为MSVC链接程序仅接受一个/DEF:参数,而CMake不想覆盖现有的一个参数:/DEF:<build_path>/exports.def(由于CMAKE_EXPORT_ALL_SYMBOLS而被添加)您在CMAKE_SHARED_LINKER_FLAGS中指定。

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

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