CMake – Erstellen einer statischen Bibliothek

Lesezeit: 3 Minuten

Benutzeravatar von Hatefiend
Hassfeind

Ich habe zwei Dateien in meinem Projekt namens Test4:

Structure.h
Structure.c

Ich möchte eine statische Bibliothek erstellen, die von anderen Projekten geladen werden kann, die diese Dateien verwenden möchten. Hier ist meine aktuelle CMake-Datei:

cmake_minimum_required(VERSION 3.6)
project(Test4)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES Structure.c Structure.h)
add_library(Test4 STATIC ${SOURCE_FILES})

Wenn ich mit dieser CMake-Datei baue, wird keine statische Bibliothek generiert. Nichts passiert. Mache ich etwas falsch?

Ich verwende die CLion-IDE.

Die Zeile add_library sollte alles sein, was Sie brauchen. Sehen Sie sich diesen Beispielcode an, den ich gerade geschrieben habe, um zu testen, wie Sie einen erstellen und dann verwenden (unter Ubuntu 16.04):

Struktur.h:

int sum( int a, int b );

Struktur.c:

int sum( int a, int b ) { 
    return a + b;
}

Haupt c:

#include <stdio.h>
#include "Structure.h"

int main() {
    int a = 5;
    int b = 8;
    int c = sum( a, b );

    printf( "sum of %d and %d is %d\n", a, b, c );

    return 0;
}

CMakeLists.txt:

# CMake instructions to make the static lib

ADD_LIBRARY( MyStaticLib STATIC
             Structure.c )


# CMake instructions to test using the static lib

SET( APP_EXE StaticTest )

ADD_EXECUTABLE( ${APP_EXE}
                Main.c ) 

TARGET_LINK_LIBRARIES( ${APP_EXE}
                       MyStaticLib )

Und dann ist hier die Ausgabe von der Ausführung:

[email protected]:~/code/cmake/static_lib$ ls
CMakeLists.txt  Main.c  Structure.c  Structure.h

[email protected]:~/code/cmake/static_lib$ cmake .
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nick/code/cmake/static_lib

[email protected]:~/code/cmake/static_lib$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  Main.c  Makefile  Structure.c  Structure.h

[email protected]:~/code/cmake/static_lib$ make
Scanning dependencies of target MyStaticLib
[ 25%] Building C object CMakeFiles/MyStaticLib.dir/Structure.c.o
[ 50%] Linking C static library libMyStaticLib.a
[ 50%] Built target MyStaticLib
Scanning dependencies of target StaticTest
[ 75%] Building C object CMakeFiles/StaticTest.dir/Main.c.o
[100%] Linking C executable StaticTest
[100%] Built target StaticTest

[email protected]:~/code/cmake/static_lib$ ls
CMakeCache.txt  cmake_install.cmake  libMyStaticLib.a  Makefile    Structure.c
CMakeFiles      CMakeLists.txt       Main.c            StaticTest  Structure.h

[email protected]:~/code/cmake/static_lib$ ./StaticTest 
sum of 5 and 8 is 13

  • Wurde das Problem dadurch gelöst? Ich würde gerne mehr wissen, da ich ein ähnliches Problem habe. Ich sehe nicht, wie sich dies vom Code von OP unterscheidet.

    – kutschkem

    7. Juni 2018 um 14:47 Uhr

Ich hatte das gleiche Problem. Was ich vermisst habe, ist der Ort, an dem Build-Dateien erstellt werden.

CLion erstellt Bibliotheken oder ausführbare Dateien unter cmake-build-* Verzeichnis. WennBuild, Execution, Deployment > CMake > Configuration ist Debugdie lib-Datei (.a) wird erstellt unter cmake-build-debug.

Nachdem Sie den Befehl verwendet haben cm machen . Dann hat das Makefile die Option like default_target machen , widerrufen Sie es und Sie erhalten eine .a-Datei in Ihrem r-Verzeichnis. Besuch https://cmake.org/cmake/help/v3.0/command/add_library.html wird dir helfen!

1387450cookie-checkCMake – Erstellen einer statischen Bibliothek

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy