У меня есть небольшая библиотека, которую я сделал (в основном, обертки для более тупой библиотеки внизу), которую я компилировал и не использовал никаких проблем в отдельном проекте. Сейчас я использую эту библиотеку в другом проекте и попытался соответствующим образом изменить 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 раньше (без ссылок на библиотеки).
Это с clang@8.0.0 в Ubuntu 16.04.
Любая помощь будетбыть высоко ценится! Извиняюсь, если я пропустил что-то простое!