这与Force CMake to use C++ compiler for C files with Visual Studio类似,但不完全相同。它不一样,因为它的CMake文件导致失败;而我几乎在所有现代平台上工作,从BSD和OS X到Solaris和Unix。
我试图避免CMake执行无用的检查:
project(cryptopp, CXX)
这是我尝试生成makefile时会发生什么:
$ 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对所有文件使用C ++编译器,包括它自己的CMake文件?
我在Ubuntu 12 LTS上,它提供:
$ cmake --version
cmake version 2.8.7
答案 0 :(得分:3)
有一些方法可以将.c
添加为CXX
编译器的有效文件扩展名。即使这是非常先进的CMake东西,你可能需要 - 如果你一定要支持旧版本的CMake - 无论如何都要“制作规则覆盖脚本”。
所以我成功测试了以下内容:
<强> 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)
由于@Tsyvarev已评论check_type_size()
支持LANGUAGE
参数,但遗憾的是不适用于CMake版本2.8.7。但是这个旧版本已经支持CMAKE_USER_MAKE_RULES_OVERRIDE
。
所以我仍然想知道是不是最好的解决方案是转到更新版本的CMake(迫使一些较旧的CMake版本用户升级)。或者编写自己的try_compile()
摘要。
<强>参考强>