0

私たちCMakeFile.txtには、SunCC コード パスの次のものが含まれています。SunCC は-xarch=XXXGCC スタイルではなく使用し-mXXXます。

CHECK_CXX_COMPILER_FLAG("-xarch=sha" CRYPTOPP_IA32_SHA)

Sun のコンパイラで CMake を実行すると、次のようになります。

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

ただし、コンパイルすると、次のようになります。

$ 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 を追加しても、CMake が障害を検出するの-errwarn-errwarn=%all役立ちません。

このメッセージは、ユーザーに多くの問題を引き起こす可能性があります。また、クリーン コンパイルのガバナンスにも違反します。トラブルを未然に防ぎたいと思います。

CHECK_CXX_COMPILER_FLAG不正な値でテストに失敗するように CMake に指示するにはどうすればよいですか?

4

2 に答える 2

1

コンパイラフラグをチェックするとき、CMakeはコンパイルコマンドの結果を単純に検証すると思います。「警告」メッセージは結果に影響しないため、CMake はフラグが実際に無視されていることを検出できません。

try_compileコマンドを使用してフラグを手動でテストすることができるため、いくつかのパターン (「警告」など) の出力を確認できます。

CHECK_CXX_SOURCE_COMPILESマクロもありますが、これはすでに一致パターンを受け入れています。

その質問とそれに対する私の答えも参照してください。

于 2017-08-26T16:16:20.827 に答える