Недавно начал изучать C. Всё шло хорошо, пока я работал в одном файле. Сейчас я решил разбить код на несколько файлов и тут код перестал работать. Что я предпринял.
Вариант 1:
--cmake-build-debug
--CMakeLists.txt
--library.c
--library.h
--printer.c
В CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(dbc C)
set(CMAKE_C_STANDARD 11)
add_library(dbc library.c library.h printer.c)
В library.h
#ifndef DBC_LIBRARY_H
#define DBC_LIBRARY_H
void print();
#endif //DBC_LIBRARY_H
В library.с
#include "library.h"
int main() {
print();
return 0;
}
В printer.c
#include "library.h"
#include "stdio.h"
void print() {
printf("Hello, world!\n");
}
CMake не жалуется. Но при попытке запустить проект вижу:
undefined reference to `print'
Но вариант 2 мне более интересен:
--cmake-build-debug
--CMakeLists.txt
--library.c
--library.h
--printer
----printer.c
----printer.h
Код почти такой же, в CMake
cmake_minimum_required(VERSION 3.24)
project(dbc C)
set(CMAKE_C_STANDARD 11)
add_library(dbc library.c library.h printer/printer.c printer/printer.h)
в printer.c
#include "printer.h"
#include "stdio.h"
void print() {
printf("Hello, world!\n");
}
В printer.h
#ifndef DBC_PRINTER_H
#define DBC_PRINTER_H
void print();
#endif
В library.h
#ifndef DBC_LIBRARY_H
#define DBC_LIBRARY_H
#endif
в library.c
#include "printer/printer.h"
#include "library.h"
int main() {
print();
return 0;
}
И ошибка та же. CMake пишет:
-- Configuring done
-- Generating done
-- Build files have been written to: D:/domains/fastdb/dbc/cmake-build-debug
Я зашёл в cmake-build-debug и не нашёл там никакого exe или чего-то подобного.
Что исправить, чтобы код скомпилировался?