【问题标题】:How does cmake set the file name of the dynamic library to be built?cmake如何设置要构建的动态库的文件名?
【发布时间】:2023-01-24 17:04:37
【问题描述】:

我想在libgit2 中添加一个LuaJIT 包装器,以便它可以在neovim 中使用。

cmake配置如下:

cmake_minimum_required(VERSION 3.22.2)
project("git2-neovim")

message(STATUS "cmake binary directory: ${CMAKE_BINARY_DIR}")

# Compile commands are output to "compile_commands.json", so that tools such as "ccls" can provide assistance.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set gcc compile options.
set(CMAKE_C_FLAGS_DEBUG "$ENV{CFLAGS} -Wall -g3 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "$ENV{CFLAGS} -O3 -Wall")

set(
    SRC_FILES
    src/libgit2.c
)

add_library(${PROJECT_NAME} SHARED ${SRC_FILES})

find_package(PkgConfig REQUIRED)
if (PKG_CONFIG_FOUND)
    pkg_check_modules(LIBGIT2 REQUIRED libgit2)
    include_directories(${LIBGIT2_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} ${LIBGIT2_LIBRARIES})
endif(PKG_CONFIG_FOUND)

这会生成一个“libgit2-neovim.so”文件,但我想生成一个“libgit2.so”文件。

由于我只在neovim中使用,所以与真正的libgit2没有冲突。

环境信息:

操作系统:Archlinux

cmake 版本:3.25.1

【问题讨论】:

    标签: cmake


    【解决方案1】:

    cmake如何设置要构建的动态库的文件名?

    输出文件名由目标属性 https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#library-output-artifacts 控制,默认由 https://cmake.org/cmake/help/latest/variable/CMAKE_SHARED_LIBRARY_PREFIX.html 后跟库名称和 https://cmake.org/cmake/help/latest/variable/CMAKE_SHARED_LIBRARY_SUFFIX.html 组成。

    我想生成一个“libgit2.so”文件

    所以将你的库命名为 git2 而不是 git2-neovim。

    add_library(git2
    

    或设置目标的 LIBRARY_OUTPUT_NAME 目标属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      相关资源
      最近更新 更多