告诉CMake使用C++;来自CMake的C文件的编译器?
这与类似,但不完全相同。它不一样,因为它的CMake文件导致了故障;我几乎在所有现代平台上工作,从BSD和OSX到Solaris和Unix 我试图避免CMake执行无用的检查:告诉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
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
模块)。