2016-06-20 10 views
3

これはForce CMake to use C++ compiler for C files with Visual Studioに似ていますが、全く同じではありません。そのCMakeファイルが失敗を引き起こすため、同じではありません。 BSDやOS XからSolarisやUnixに至るまで、ほぼすべての現代的なプラットフォームで作業しています。CMakeからのCファイルに対してCMakeにC++コンパイラを使用するように指示しますか?

私はcmakeのが行っている、無駄な検査を避けるために試してみました:ここ

project(cryptopp, CXX) 

私はメイクファイルを生成しようとすると何が起こるかです:

$ cmake . 
-- Check if the system is big endian 
-- Searching 16 bit integer 
-- Check size of unsigned short 
CMake Error at /usr/share/cmake-2.8/Modules/CheckTypeSize.cmake:82 (try_compile): 
    Unknown extension ".c" for file 

    /home/jeffrey/cryptopp/CMakeFiles/CheckTypeSize/CMAKE_SIZEOF_UNSIGNED_SHORT.c 

    try_compile() works only for enabled languages. Currently these are: 

    CXX 

    See project() command to enable other languages. 
Call Stack (most recent call first): 
    /usr/share/cmake-2.8/Modules/CheckTypeSize.cmake:167 (__check_type_size_impl) 
    /usr/share/cmake-2.8/Modules/TestBigEndian.cmake:27 (CHECK_TYPE_SIZE) 
    CMakeLists.txt:49 (TEST_BIG_ENDIAN) 

私達は私達の内の任意のCファイルを持っていません私たちはproject(cryptopp, CXX)(私がcmake --help-command projectを正しく読んでいる場合)で安全でなければなりません。

引用された質問はプロジェクトファイルについて語りますが、CMakeファイルについては言及しません。

どのように私はCMakeに、それ自身のCMakeファイルを含むすべてのファイルに対してC++コンパイラを使用するよう指示しますか?


私はUbuntuのLTS 12上だし、それが提供されます。

$ cmake --version 
cmake version 2.8.7 
+1

)、 'check_type_size()'マクロは* LANGUAGE *オプションをサポートしています。最新のバージョンでも 'test_big_endian()'はこのようなオプションをサポートしておらず、 'check_type_size'に対しても3.0より前のCMakeはこのオプションをサポートしていないというニュースがありません。しかし、これらは単なるcmakeモジュールです。あなたはそれらからコードを取り、必要に応じて調整することができます。 – Tsyvarev

答えて

2

CXXコンパイラのための有効なファイル拡張子として.cを追加する方法があります。これは非常に高度なCMakeのものでも、古いバージョンのCMakeをサポートする必要がある場合は、とにかく "make rules overwrite script"が必要になるかもしれません。

だから私は成功し、次のテストしてみた:@Tsyvarevはcheck_type_size()LANGUAGEをサポートしていますコメントしたように

CryptoppMakeRulesOverwrite.cmake

list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS c) 

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.7 FATAL_ERROR) 

set(CMAKE_USER_MAKE_RULES_OVERRIDE "CryptoppMakeRulesOverwrite.cmake") 

project(cryptopp CXX) 

include(CheckTypeSize) 
CHECK_TYPE_SIZE("unsigned short" CMAKE_SIZEOF_UNSIGNED_SHORT) 

をパラメータですが、残念ながらCMakeバージョン2.8.7ではtです。しかし、この古いバージョンはすでにCMAKE_USER_MAKE_RULES_OVERRIDEをサポートしています。

私はまだ最善の解決策が新しいバージョンのCMake(古いCMakeバージョンの一部のユーザーにアップグレードを余儀なくさせる)に行くのではないかと疑問に思っています。または独自のtry_compile()スニペットを作成します。 [ドキュメント](https://cmake.org/cmake/help/v3.0/module/CheckTypeSize.htmlによれば

参照

+0

ありがとうフロリアン。私たちの義務の1つは、ユーザーにアップグレードを要求しない*ことではありません。いくつかの設定では、変更管理の悪夢が発生し、経営幹部がサインオフする必要があります。 (私は、米国政府の特定の支店のような環境で働いてきました)。私たちのものが「うまくいく」なら誰にとっても簡単です。 – jww

+0

@jwwわかりました。私はあなたの推論を確かに理解することができます。私はもっ​​と簡単な解決策を望んでいました。私はそれに応じて私の答えを更新しました。上記のソリューションはあなたのために機能しますか?それ以外の場合は 'try_compile()'コードを追加することもできます( 'CheckTypeSize'モジュールを使用する必要性を回避する)。 – Florian

関連する問題