我有一个小库,我已经制作了一个库(主要是下面一个比较迟钝的库的包装器),我一直在编译和使用包含的项目中没有问题。我现在正在另一个项目中使用这个库,并试图适当地更改CMakeLists.txt (参见下面)。
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++时,我的整个项目就不再生成,并因错误而失败:
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。
任何帮助都将不胜感激!抱歉,如果我错过了一些简单的东西!
发布于 2019-11-07 20:46:09
,我是否应该包括一些替代代码来创建缺少的变量
CMAKE_C_COMPILE_OBJECT
?
否,正如CMake错误声明的那样,这是一个应该由CMake初始化的“内部CMake变量”。这不是你应该为自己设定的东西。当您调用project()
时,应该间接设置它。但是,您只告诉CMake在project()
命令中使用C++ (带有CXX
选项)。如果希望CMake使用C和C++,则需要同时添加两者:
project(${project} LANGUAGES C CXX)
更好的是,CMake默认启用C和C++,因此您可以简单地这样做:
project(${project})
https://stackoverflow.com/questions/58754964
复制相似问题