如何通过 CMAKE 将链接器标志“DEF”和“NODEFAULTLIB”添加到 vs2012 项目?
2 回答
您可以将它们附加到CMAKE_EXE_LINKER_FLAGS
:
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def /NODEFAULTLIB")
endif()
一般的方法是将链接器标志添加到CMAKE_xxx_LINKER_FLAGS
,是的。但是在使用CMAKE_SHARED_LINKER_FLAGS
and/DEF:
参数的情况下,有一个特殊情况让我遇到了麻烦。
如果您已经使用CMAKE_EXPORT_ALL_SYMBOLS
( CMAKE_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 。