首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让CHECK_CXX_COMPILER_FLAG在非法价值上失败?

如何让CHECK_CXX_COMPILER_FLAG在非法价值上失败?
EN

Stack Overflow用户
提问于 2017-08-26 14:14:09
回答 1查看 1.4K关注 0票数 0

我们的CMakeFile.txt包含SunCC代码路径的以下内容。SunCC使用的是-xarch=XXX而不是GCC风格的-mXXX

代码语言:javascript
运行
复制
CHECK_CXX_COMPILER_FLAG("-xarch=sha" CRYPTOPP_IA32_SHA)

当我们在Sun的编译器下运行CMake时,它的结果是:

代码语言:javascript
运行
复制
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CRYPTOPP_IA32_SSSE3
-- Performing Test CRYPTOPP_IA32_SSSE3 - Success
-- Performing Test CRYPTOPP_IA32_SSE4
-- Performing Test CRYPTOPP_IA32_SSE4 - Success
-- Performing Test CRYPTOPP_IA32_CLMUL
-- Performing Test CRYPTOPP_IA32_CLMUL - Success
-- Performing Test CRYPTOPP_IA32_AES
-- Performing Test CRYPTOPP_IA32_AES - Success
-- Performing Test CRYPTOPP_IA32_SHA
-- Performing Test CRYPTOPP_IA32_SHA - Success
...

但是,当我们编译它时,结果是:

代码语言:javascript
运行
复制
$ make sha-simd.o shacal2-simd.o VERBOSE=1

make -f CMakeFiles/cryptopp-object.dir/build.make CMakeFiles/cryptopp-object.dir/sha-simd.cpp.o
Building CXX object CMakeFiles/cryptopp-object.dir/sha-simd.cpp.o
/opt/solarisstudio12.4/bin/CC -m32 -template=no%extdef -g -xO2 -DNDEBUG -xarch=sha -o CMakeFiles/cryptopp-object.dir/sha-simd.cpp.o -c /export/home/test/sha-simd.cpp
CC: Warning: illegal use of -xarch option, illegal value ignored: sha

make -f CMakeFiles/cryptopp-object.dir/build.make CMakeFiles/cryptopp-object.dir/shacal2-simd.cpp.o
Building CXX object CMakeFiles/cryptopp-object.dir/shacal2-simd.cpp.o
/opt/solarisstudio12.4/bin/CC -m32 -template=no%extdef -g -xO2 -DNDEBUG -xarch=sha -o CMakeFiles/cryptopp-object.dir/shacal2-simd.cpp.o -c /export/home/test/shacal2-simd.cpp
CC: Warning: illegal use of -xarch option, illegal value ignored: sha

添加SunCC的-errwarn-errwarn=%all并不能帮助CMake检测故障。

这条消息可能会给用户带来很多问题。它也违反了我们对清理编译的治理。我们想把它清理干净,避免任何麻烦。

我们如何告诉CMake不通过非法值的CHECK_CXX_COMPILER_FLAG测试?

EN

回答 1

Stack Overflow用户

发布于 2017-08-26 16:16:20

我猜,当检查编译器标志时,CMake只需验证编译命令的结果。由于“警告”消息不影响结果,CMake无法检测到该标志实际上被忽略。

您可以使用编译命令手动测试标志,这样就可以检查输出中的某些模式(例如“警告”)。

还有编撰宏,它已经接受匹配模式。

也见那个问题和我的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45896327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档