使用 CMake 打开链接器标志
当使用 CMake 生成 VS2010 目标时,我希望打开 /LTCG 标志(如果可能的话,仅适用于release + releasewithdebinfo,但如果它用于调试版本则可以)。如何修改链接器标志? add_definitions()
不起作用,因为它只修改编译器标志。是的,我已将其包装在 if(MSVC) 中。
如何修改链接器标志?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 #pragma comment(linker, ...) 修改 MSC 中的链接器标志。
但是,如果您想在使用 cmake 的构建过程中执行此操作,则以下是您需要知道的名称:
CMAKE_EXE_LINKER_FLAGS< /code>
CMAKE_SHARED_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
(感谢 Cmake.org)。
You can modify the linker flags in MSC using #pragma comment(linker, ...)
However, if you'd like to do it in the build process with cmake, here are the names you need to know:
CMAKE_EXE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
(Thanks to Cmake.org).
和 STATIC_LIBRARY_FLAGS
http://www.cmake.org/cmake/help /v2.8.8/cmake.html#prop_tgt:STATIC_LIBRARY_FLAGS
用于静态库
and STATIC_LIBRARY_FLAGS
http://www.cmake.org/cmake/help/v2.8.8/cmake.html#prop_tgt:STATIC_LIBRARY_FLAGS
for static libraries
用于添加链接器标志 - 以下 4 个 CMake 变量:
可以使用 ucm 链接器标志的 nofollow">ucm_add_linker_flags 宏
也可以基于每个目标进行管理- 通过使用 target_link_libraries 并使用
传递标志 -
在它们前面(但不带有-l
- 它将被视为链接库而不是链接标志)。For adding linker flags - the following 4 CMake variables:
can be easily manipulated for different configs (debug, release...) with the ucm_add_linker_flags macro of ucm
linker flags can also be managed on a per-target basis - by using target_link_libraries and passing flags with a
-
in front of them (but not with a-l
- that would be treated as a link library and not a link flag).使用“ucm”库似乎是一个不错的方法。我推出了一个简单的宏,帮助我在 CMake 中统一管理所有配置的链接器标志,同时还允许特定于编译器的使用。 (当多次配置 CMake 时,仅设置变量可能会导致标志堆积。)
然后,通过创建一个特定于编译器的宏来检查正在使用的编译器,从而支持其他编译器。这使得在错误的编译器上设置正确的标志变得更加困难。
和
The use of the "ucm" library seems like a nice approach. I rolled a simple macro that help me uniformly manage linker flags in CMake for all configurations while also allowing compiler-specific use. (Just setting the variable can cause flags to stack up when CMake is configured multiple times.)
Other compilers are then supported by creating a compiler-specific macro that checks for the compiler to be in use. That makes it harder to set the right flag on the wrong compiler.
and
您可以使用
LINK_FLAGS
属性为特定目标添加链接器标志:(请注意,由于我使用的是
APPEND_STRING
,因此我在标志前添加了一个空格)You can add linker flags for a specific target using the
LINK_FLAGS
property:(note that I added a space before the flag since I'm using
APPEND_STRING
)