it-swarm.com.de

CMake - Erstellen einer statischen Bibliothek

Ich habe zwei Dateien in meinem Projekt namens Test4:

Structure.hStructure.c

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

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})

Beim Erstellen dieser CMake-Datei wird keine statische Bibliothek generiert. Nichts passiert. Mache ich etwas falsch?

Ich verwende die CLion-IDE.

12
Hatefiend

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
19
ndeubert

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

CLion erstellt Bibliotheken oder Exectables im Verzeichnis cmake-build-*. Wenn Build, Execution, Deployment > CMake > ConfigurationDebug ist, wird die lib-Datei (.a) unter cmake-build-debug erstellt.

2
noobar

Nachdem Sie den Befehl cmake. Verwendet haben, hat das Makefile die Option make default_target, widerruft es und Sie erhalten eine .a-Datei Verzeichnis. Besuche https://cmake.org/cmake/help/v3.0/command/add_library.html wird dir helfen!

0
Maurice Aiken