Library

Filename: CMakeLists.txt

cmake_minimum_required(VERSION 3.31)

project(library LANGUAGES C)

add_library(greeter ./src/lib.c)
target_include_directories(greeter PUBLIC ./include)

Filename: src/lib.c

#include <greeter.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *greeting_for(char const *name) {
    char *greeting = malloc(strlen(name) + 8);
    sprintf(greeting, "Hello, %s!", name);
    return greeting;
}

Filename: include/greeter.h

#pragma once

char *greeting_for(char const *name);
$ cmake -B ./build/
-- The C compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /workspaces/cmakebyexample.jcbhmr.com/listings/03-library/build
$ cmake --build ./build/
[ 50%] Building C object CMakeFiles/greeter.dir/src/lib.c.o
[100%] Linking C static library libgreeter.a
[100%] Built target greeter
$ nm ./build/libgreeter.a 

lib.c.o:
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 T greeting_for
                 U malloc
                 U sprintf
                 U strlen