c++ - CMake - 创建一个静态库

我的项目中有两个名为 Test4 的文件:

结构.h 结构.c

我想创建一个静态库,其他想要使用这些文件的项目可以加载该库。这是我目前的 CMake 文件:

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

当我使用该 CMake 文件构建时,不会生成静态库。什么都没发生。我做错了吗?

我正在使用 CLion IDE。

最佳答案

add_library 行应该是您所需要的。请参阅我刚刚编写的示例代码,以测试创建一个然后使用它(在 Ubuntu 16.04 上):

结构.h:

int sum( int a, int b );

结构.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 )

然后这是运行它的输出:

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

https://stackoverflow.com/questions/43772887/

相关文章:

android - 如何在 Gradle 构建脚本(Android)中定义和使用常量?

.net - MSBuild 和 F# 的 FAKE 有什么区别?

visual-studio-2010 - 从命令行发布 Web 应用程序

build - 错误 : Sonar server 'http://localhost:9000'

ios - 如何为 iPhone 构建 Boost-Libraries

javascript - 如果我仍然在构建时连接所有文件,我为什么要使用 require.js?

java - 将 Google Guava 添加到 Android 项目 - 显着减慢构建速度

c# - 如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

c# - 如何在解决方案级别使用 Microsoft.Net.Compilers?

javascript - 需要一个带有 webpack 的模块