CMake - Creating a static library

前端 未结 3 947
猫巷女王i
猫巷女王i 2020-12-24 07:05

I have two files in my project called Test4:

Structure.h Structure.c

I want to create a static library that can be loa

相关标签:
3条回答
  • 2020-12-24 07:25

    I had same issue. What I missed is the location where build files are created.

    CLion makes libraries or exectables under cmake-build-* directory. IfBuild, Execution, Deployment > CMake > Configuration is Debug, the lib file (.a) is created under cmake-build-debug.

    0 讨论(0)
  • 2020-12-24 07:34

    The add_library line should be all you need. See this example code I just wrote to test out creating one and then using it (on Ubuntu 16.04):

    Structure.h:

    int sum( int a, int b );
    

    Structure.c:

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

    Main.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 )
    

    And then here is the output from running it:

    nick@dusseldorf:~/code/cmake/static_lib$ ls
    CMakeLists.txt  Main.c  Structure.c  Structure.h
    
    nick@dusseldorf:~/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
    
    nick@dusseldorf:~/code/cmake/static_lib$ ls
    CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  Main.c  Makefile  Structure.c  Structure.h
    
    nick@dusseldorf:~/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
    
    nick@dusseldorf:~/code/cmake/static_lib$ ls
    CMakeCache.txt  cmake_install.cmake  libMyStaticLib.a  Makefile    Structure.c
    CMakeFiles      CMakeLists.txt       Main.c            StaticTest  Structure.h
    
    nick@dusseldorf:~/code/cmake/static_lib$ ./StaticTest 
    sum of 5 and 8 is 13
    
    0 讨论(0)
  • 2020-12-24 07:35

    After you use command cmake . Then the Makefile will have the option like make default_target , revoke it and then you get a .a file in you r directory. Visit https://cmake.org/cmake/help/v3.0/command/add_library.html will help you!

    0 讨论(0)
提交回复
热议问题