gpt4 book ai didi

linker - CMake:基于 BUILD_TYPE 的静态和动态链接

转载 作者:行者123 更新时间:2023-12-04 03:04:03 24 4
gpt4 key购买 nike

我正在开发一个依赖于两个库的小型模拟软件,GSL 和 libconfig。作为构建系统,我使用 CMake。对于 GSL 和 libconfig,我找到了 cmake 文件并将它们复制到 cmake/我的项目目录。

场景如下:我希望项目有几种不同的构建类型,例如 debug , release等,还有一个叫做 cluster 的自定义, 增加了 -static到 GCC 标志和针对 .a 的链接我假设存在 GSL 和 libconfig 的库。

我的 CMakeLists.txt到目前为止看起来像这样:

# version
SET(PACKAGE_VERSION "1.0")
SET(PACKAGE_NAME "INTERFACE")

PROJECT(interface C CXX)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)


# dirs -----------------------------------------------------

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")

FIND_PACKAGE(GSL REQUIRED)
INCLUDE_DIRECTORIES(${GSL_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${GSL_LIBRARIES})

FIND_PACKAGE(LibConfig REQUIRED)
INCLUDE_DIRECTORIES(${LIBCONFIG_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${LIBCONFIG_LIBRARIES})

CONFIGURE_FILE("res/config.h.in" "config.h")
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})

SET_DIRECTORY_PROPERTIES(PROPERTIES
ADDITIONAL_MAKE_CLEAN_FILES "config.h"
)


# compilation ----------------------------------------------

ADD_EXECUTABLE( interface
interface.c interface.h config.h
helpers.c
output.c
lattice.c
genetic.c
)

# optional CFLAGS
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -std=c99")
SET(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math")
SET(CMAKE_C_FLAGS_CLUSTER "-O3 -ffast-math -static")
SET(CMAKE_C_FLAGS_DEBUG "-g")
SET(CMAKE_C_FLAGS_PROFILE "-g -ffast-math -pg")

TARGET_LINK_LIBRARIES(interface m ${LIBS})



# installation --------------------------------------------

INSTALL(TARGETS interface DESTINATION bin)

这添加了 -static到编译器,当我使用 -DCMAKE_BUILD_TYPE=cluster 时.问题是,它仍然链接到 .so libs 的版本,这会导致 gcc 抛出错误。至少 FindLibConfig.cmake脚本设置了 LIBCONFIG_LIBRARY和一个 LIBCONFIG_STATIC_LIBRARY变量,我可以使用。

达到我的目标的最优雅或最聪明的方法是什么?

最佳答案

根据 cmake documentation , cmake 使用变量 BUILD_SHARED_LIBS 来确定 add_library() 的默认值。

如果您设置为 ON cmake 将假定所有 add_library()调用将作为

add_library(target SHARED lib1 lib2 ...)

例如,cmake 命令行上的 -DBUILD_SHARED_LIBS=ON 之类的内容可能会执行您的要求。

关于linker - CMake:基于 BUILD_TYPE 的静态和动态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com