告诉CMake使用C++;来自CMake的C文件的编译器?

告诉CMake使用C++;来自CMake的C文件的编译器?,cmake,Cmake,这与类似,但不完全相同。它不一样,因为它的CMake文件导致了故障;我几乎在所有现代平台上工作,从BSD和OSX到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

这与类似,但不完全相同。它不一样,因为它的CMake文件导致了故障;我几乎在所有现代平台上工作,从BSD和OSX到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文件,因此使用
项目(cryptopp,CXX)
应该是安全的(如果我正确阅读
cmake--help command project

引用的问题涉及项目文件,但不涉及CMake文件

<>我如何告诉CGube对所有文件,包括它自己的CMAGE文件使用C++编译器?< /P>
我使用的是Ubuntu12LTS,它提供:

$ cmake --version
cmake version 2.8.7

有几种方法可以将
.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所评论的,它支持
语言
参数,但不幸的是,它不支持CMake 2.8.7版。但是这个旧版本已经支持

因此,我仍然在想,是否最好的解决方案是使用较新版本的CMake(迫使一些使用较旧版本的CMake的用户升级)。或者写你自己的片段

参考资料


根据,宏
检查类型大小()
支持语言选项。坏消息是,
test\u big\u endian()
即使在最新版本中也不支持此选项,3.0之前的CMake即使在
check\u type\u size
中也不支持此选项。但这些只是cmake模块。您可以从他们那里获取代码,并根据您的需要进行调整。谢谢Florian。我们的任务之一是不要求用户升级。在某些情况下,这是一场变革控制的噩梦,需要一位高管签字。(我在这些环境中工作过,比如美国政府的某些部门)。如果我们的东西“正常工作”,对每个人都会比较容易。@jww好的,我当然能理解你的推理。我只是希望有一个更简单的解决办法。我已经相应地更新了我的答案。上述解决方案对您有效吗?否则,我也可以添加
try\u compile()
code(不需要使用
CheckTypeSize
模块)。