首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake不会在没有set_source_files_properties的情况下使用CXX语言构建

CMake不会在没有set_source_files_properties的情况下使用CXX语言构建
EN

Stack Overflow用户
提问于 2019-11-07 18:30:24
回答 1查看 4.9K关注 0票数 1

我有一个小库,我已经制作了一个库(主要是下面一个比较迟钝的库的包装器),我一直在编译和使用包含的项目中没有问题。我现在正在另一个项目中使用这个库,并试图适当地更改CMakeLists.txt (参见下面)。

代码语言:javascript
运行
复制
cmake_minimum_required (VERSION 3.5)

set(project "foobar")

project(${project} LANGUAGES CXX)

set(${project}_VERSION_MAJOR 0)
set(${project}_VERSION_MINOR 1)

add_library(${project} SHARED
./driver/foo.h
./driver/foo.c
./bar.cpp
./bar.hpp)

set_source_files_properties(./driver/foo.c PROPERTIES LANGUAGE CXX)

target_compile_features(${project}
  PUBLIC
  cxx_std_11)

target_include_directories(${project} PUBLIC ./driver/ .)

 set_target_properties(${project} PROPERTIES LINKER_LANGUAGE CXX)

add_executable(bno055-test
./testingProject.cpp
)

target_link_libraries(test ${project})

install(
  TARGETS ${project}
  RUNTIME DESTINATION bin)

我遇到的错误是行set_source_files_properties(./driver/foo.c PROPERTIES LANGUAGE CXX)。当使用上面的C++标志编译这个C文件时,我会收到许多clang-8: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]类型的警告。这是预期的,因为我使用的是不推荐的方法,不应该使用C++标志编译这个文件。但是,每当我移除这一行,或者修改它以指定C而不是C++时,我的整个项目就不再生成,并因错误而失败:

代码语言:javascript
运行
复制
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_C_COMPILE_OBJECT
-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.
Makefile:283: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
"/usr/bin/make -j4 all" terminated with exit code 2. Build might be incomplete.

我对CMake还不太熟悉,看不出为什么这一行代码和错误是这样关联的。我是否应该包括其他代码来创建缺少的变量CMAKE_C_COMPILE_OBJECT

我假设当我最初使用Eclipse创建这个项目时,这一行是自动生成的,我不清楚为什么它现在会造成问题,因为我以前用相同的CMakeLists.txt编译这些文件(没有库链接)。

这是在Ubuntu16.04上使用clang@8.0.0。

任何帮助都将不胜感激!抱歉,如果我错过了一些简单的东西!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-07 20:46:09

,我是否应该包括一些替代代码来创建缺少的变量CMAKE_C_COMPILE_OBJECT

否,正如CMake错误声明的那样,这是一个应该由CMake初始化的“内部CMake变量”。这不是你应该为自己设定的东西。当您调用project()时,应该间接设置它。但是,您只告诉CMake在project()命令中使用C++ (带有CXX选项)。如果希望CMake使用C和C++,则需要同时添加两者:

代码语言:javascript
运行
复制
project(${project} LANGUAGES C CXX)

更好的是,CMake默认启用C和C++,因此您可以简单地这样做:

代码语言:javascript
运行
复制
project(${project})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58754964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档