Не линкуются *.c и *.cpp файлы в проекте
День добрый!
Осваиваю cmake. Не могу понять почему вместе не собираются исходники *.cpp и *.c
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(task2_cmake LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(task2_cmake main.cpp src/lib.c)
main.cpp:
#include "src/lib.h"
int main()
{
print();
return 0;
}
lib.h
#ifndef LIB_H
#define LIB_H
#ifdef __cplusplus
extern "C" {
#endif
void print();
#ifdef __cplusplus
}
#endif
#endif // LIB_H
lib.c
#include "lib.h"
void print()
{
int a;
}
Собираю из QtCreator Выдаёт ошибку: undefined reference to `print'
Обертка #include "src/lib.h" в extern "C" ни к чему не приводит
Ответы (3 шт):
Добавление в CMakeLists.txt что проект поддерживает язык C
project(task2_cmake LANGUAGES CXX C)
Решение было вот таким:
project(task2_cmake LANGUAGES C CXX)
или
project(task2_cmake)
добавлю пояснение, CMake если у него не указан язык проекта по умолчанию "инициализирует" С и C++ компиляторы, находит в системе, проверяет что они компилируют и прописывает во временных файлах информацию о них, если явно задать только один из языков, cmake сделает это только для него и не будет ни чего знать об остальных. Соответственно когда он встретит файл .с в проекте он попытается отдать в команду конторой нет в билд системе, даже если используется один и тот же исполняемый файл для компиляции.