Не линкуются *.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 шт):

Автор решения: Yaroslav

Добавление в CMakeLists.txt что проект поддерживает язык C

project(task2_cmake LANGUAGES CXX C)
→ Ссылка
Автор решения: Dmitrii

Решение было вот таким:

project(task2_cmake LANGUAGES C CXX) 

или

project(task2_cmake) 
→ Ссылка
Автор решения: Arenoros

добавлю пояснение, CMake если у него не указан язык проекта по умолчанию "инициализирует" С и C++ компиляторы, находит в системе, проверяет что они компилируют и прописывает во временных файлах информацию о них, если явно задать только один из языков, cmake сделает это только для него и не будет ни чего знать об остальных. Соответственно когда он встретит файл .с в проекте он попытается отдать в команду конторой нет в билд системе, даже если используется один и тот же исполняемый файл для компиляции.

→ Ссылка