如何通过CMAKE将链接标志“DEF”和“NODEFAULTLIB”添加到vs2012项目?
答案 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_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。