- 主题:问个 cmake 的写法
新版本 gcc 在链接的时候会有警告:
warning: gf2m-elf-x86_64.S.o: missing .note.GNU-stack section implies executable stack
所以我之前在 cmake 里面加入了这行:
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack")
endif()
也就是加入 -z noexecstack 就可以解决这个警告。
但问题又来了,旧版本的 gcc 不支持这个参数啊。在 cmake 里面要怎么判断是 gcc 编译器,并且高于某个版本,才启用这个参数呢?
--
FROM 183.253.147.*
搜下stackoverflow就有答案
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
# add specific compile option
endif()
【 在 hgoldfish 的大作中提到: 】
: 新版本 gcc 在链接的时候会有警告:
: warning: gf2m-elf-x86_64.S.o: missing .note.GNU-stack section implies executable stack
: 所以我之前在 cmake 里面加入了这行:
: ...................
--
FROM 66.99.95.*
chatgpt的回答,供参考
您可以使用 cmake 的内置函数 check_cxx_compiler_flag,来检测编译器是否支持 -z noexecstack 这个参数,并在版本满足要求时加入该参数。
代码如下:
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-z noexecstack" NOEXECSTACK_SUPPORTED)
if (NOEXECSTACK_SUPPORTED)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack")
endif()
需要注意的是,不同版本的 gcc 可能有不同的支持情况,您可以通过编译器版本变量来进行版本判断,再加入参数。
【 在 hgoldfish 的大作中提到: 】
: 新版本 gcc 在链接的时候会有警告:
: warning: gf2m-elf-x86_64.S.o: missing .note.GNU-stack section implies executable stack
: 所以我之前在 cmake 里面加入了这行:
: ...................
--
FROM 8.219.174.*
ChatGPT是不是扒过stackoverflow的库啊?
【 在 littleSram 的大作中提到: 】
: chatgpt的回答,供参考
: 您可以使用 cmake 的内置函数 check_cxx_compiler_flag,来检测编译器是否支持 -z noexecstack 这个参数,并在版本满足要求时加入该参数。
: 代码如下:
: ...................
--
FROM 125.38.176.*
不清楚啊,也可能有人问过这个问题,人工编辑一下
【 在 tgfbeta 的大作中提到: 】
: ChatGPT是不是扒过stackoverflow的库啊?
--
FROM 117.136.38.*
chatgpt 太强了,用得舒服。不过有可能为码友自掘坟墓了。
【 在 littleSram 的大作中提到: 】
: chatgpt的回答,供参考
: 您可以使用 cmake 的内置函数 check_cxx_compiler_flag,来检测编译器是否支持 -z noexecstack 这个参数,并在版本满足要求时加入该参数。
: 代码如下:
: ...................
--
FROM 60.220.95.*
可能是我用的关键词不对,居然没搜出来。
【 在 mvtec 的大作中提到: 】
: 搜下stackoverflow就有答案
: if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
: # add specific compile option
: ...................
--
FROM 183.253.147.*
没事儿,长远看,人类可能只是土壤。
【 在 donkeymeat 的大作中提到: 】
: chatgpt 太强了,用得舒服。不过有可能为码友自掘坟墓了。
:
--
FROM 124.64.19.*
我觉得chatgpt很有意思,我甚至做了个梦,问它梦是啥意思。
【 在 donkeymeat 的大作中提到: 】
: chatgpt 太强了,用得舒服。不过有可能为码友自掘坟墓了。
:
--
FROM 124.64.19.*
我感觉它应该是能读对应的手册
【 在 tgfbeta 的大作中提到: 】
: ChatGPT是不是扒过stackoverflow的库啊?
--
FROM 123.168.94.*