- 主题:问个 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.*
可能是我用的关键词不对,居然没搜出来。
【 在 mvtec 的大作中提到: 】
: 搜下stackoverflow就有答案
: if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
: # add specific compile option
: ...................
--
FROM 183.253.147.*
牛逼!今天测试了这个答案,完全正确!
【 在 littleSram 的大作中提到: 】
: chatgpt的回答,供参考
: 您可以使用 cmake 的内置函数 check_cxx_compiler_flag,来检测编译器是否支持 -z noexecstack 这个参数,并在版本满足要求时加入该参数。
: 代码如下:
: ...................
--
FROM 183.253.147.*