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.*