CMake 指定链接选项

CMake指定目标的链接选项,有三种方案

方案一

通过target_link_options来设置,(version 3.13.以上)

add_executable(mymathApp mymathApp.cc)
target_link_options(mymathApp PRIVATE -wl,-shared,-z,noexecstack)

方案二

通过目标的属性来设置

set_target_properties(<executable_name>
    PROPERTIES
    LINK_OPTIONS "-wl,-z,-relro"
    )

或者

set_target_properties(<executable_name>
    PROPERTIES
    LINK_FLAGS "-wl,-z,-relro"
    )

方案三

set(LINK_FLAGS)

## The options for the shared library
set(LINK_FLAGS    "-rdynamic -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
 
## the actual options for gcc
set(CMAKE_C_FLAGS             "-fsigned-char ${COMPILE_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG       "-g")
set(CMAKE_C_FLAGS_RELEASE     "-DNDEBUG")

 
## The linker options
set(CMAKE_SHARED_LINKER_FLAGS "${LINK_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS    "${LINK_FLAGS}")

参考:

CMake教程系列-04-编译相关函数 - 知乎

CMake 指定目标的链接选项_icbm的博客-CSDN博客_cmake添加链接选项

Gcc链接选项_jiang010的博客-CSDN博客_gcc 链接选项

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake是一个开源的、跨平台的自动化建构系统,它用于生成所需的构建文件(如Unix的Makefile或Windows的Visual Studio项目文件)。CMake通过使用一系列指令来描述如何生成这些文件,这些指令被称为CMakeLists.txt文件。 在CMake中,`fPIC`是一个编译选项,它表示"fully-position independent code",也就是完全位置无关的代码。这种代码允许在任何位置进行代码重定位,因此,它可以被加载到内存中的任何位置,而不会影响程序的运行。 当你在CMake中使用`fPIC`选项时,它通常是在设置编译器的链接选项时。这意味着当你使用CMake生成构建系统(如Makefile或Visual Studio项目文件)时,你需要在这些文件中指定`fPIC`作为链接选项。 具体来说,如果你正在使用g++作为你的C++编译器,并且你想生成位置无关的代码,你可能会在CMakeLists.txt文件中添加如下代码: ```cmake set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") ``` 这行代码告诉编译器生成位置无关的代码。这样,当你链接库时,库中的函数就可以在任何位置被调用,而不需要知道它们的具体位置。这对于动态链接库尤其重要,因为这些库中的函数在运行时可能需要被调用,但你不知道它们将位于内存中的哪个位置。 注意,不是所有的平台和编译器都支持`fPIC`选项。有些平台可能直接支持完全位置无关的代码,而无需任何额外的编译选项。然而,在大多数平台上,包括Linux和Windows上,你都需要使用这样的选项来生成位置无关的代码。 如果你需要更多的信息或者你有其他的问题,欢迎随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值