gpt4 book ai didi

c++ - Cmake 仅链接到可执行文件

转载 作者:行者123 更新时间:2023-11-28 01:54:10 31 4
gpt4 key购买 nike

我有一个问题,在我的项目中我有多个库,它们都以不同的方式相互链接。然后是一个只链接到一个库的可执行文件。现在有两个问题:

1) 链接库没有出现在静态库的库管理器中。

2) 库都显示在可执行文件中。

这是我的项目订单

游戏
|- 引擎
|--核心
|---图形
|----Libpng
|---平台

so图文链接libpng
核心链接图形和平台
引擎链接核心
游戏链接引擎

Utilities 是一个接口(interface)库,所以只有标题

发生的情况是所有附加依赖项都在游戏中
Core、Engine 和 Graphic 的库管理器不包含额外的依赖。

这是根 CMake

cmake_minimum_required(VERSION 2.8.9)
set(CMAKE_GENERATOR "Visual Studio 14 2015")
project(EngineOnly)

set(CMAKE_SUPPRESS_REGENERATION true)

if(WIN32)
set(PLATFORM WIN32)
else()
set(PLATFORM LINUX)
endif (WIN32)

add_subdirectory(UTILITIES)
add_subdirectory(PLATFORM)
add_subdirectory(GRAPHICS)
add_subdirectory(CORE)
add_subdirectory(Engine)
add_subdirectory(Game)

set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Trinity.Game)

这是游戏

enter image description here

#UTILITIES LIB
include_directories(../UTILITIES/INCLUDE)
include_directories(../ENGINE/INCLUDE)

#SOURCE
file(GLOB SOURCES "SOURCE/*.cpp")
file(GLOB INCLUDES "INCLUDE/*.h")

#PROJECTNAME
set(PROJECTNAME "Trinity.Game")

#LINK ALL
add_executable(${PROJECTNAME} ${SOURCES} ${INCLUDES})

set_target_properties(${PROJECTNAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/../BIN/${PLATFORM}/DEBUG"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/../BIN/${PLATFORM}/RELEASE"
)

target_link_libraries(${PROJECTNAME}
LINK_PRIVATE Trinity.Engine
)

引擎

#UTILITIES LIB
include_directories(../UTILITIES/INCLUDE)
include_directories(../CORE/INCLUDE)

#SOURCE
file(GLOB SOURCES "SOURCE/*.cpp")
file(GLOB INCLUDES "INCLUDE/*.h")

#PROJECTNAME
set(PROJECTNAME "Trinity.Engine")

#LINK ALL
add_library(${PROJECTNAME} ${SOURCES} ${INCLUDES})

set_target_properties(${PROJECTNAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/LIB/${PLATFORM}/DEBUG"
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/LIB/${PLATFORM}/RELEASE"
)

target_link_libraries(${PROJECTNAME}
LINK_PRIVATE Trinity.Core
)

核心

#UTILITIES LIB
include_directories(../UTILITIES/INCLUDE)
include_directories(../GRAPHICS/INCLUDE)
include_directories(../PLATFORM/INCLUDE)

#SOURCE
file(GLOB SOURCES "SOURCE/*.cpp")
file(GLOB INCLUDES "INCLUDE/*.h")

#PROJECTNAME
set(PROJECTNAME "Trinity.Core")

#LINK ALL
add_library(${PROJECTNAME} ${SOURCES} ${INCLUDES})

set_target_properties(${PROJECTNAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/LIB/${PLATFORM}/DEBUG"
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/LIB/${PLATFORM}/RELEASE"
)

target_link_libraries(${PROJECTNAME}
LINK_PRIVATE Trinity.Graphics
LINK_PRIVATE Trinity.Platform
)

另一个看起来一样。

我试过使用 PRIVATE 而不是 LINK_PRIVATE,但结果是一样的。

最佳答案

您不能将静态库相互链接起来,它们只出现在可执行文件中是正常的。你的代码没有编译?

有关静态库和动态库的更多信息,我建议使用此 article .

如果要在 cmake 中更改库类型,请指定 add_lib 命令:

 add_library(${LIB_NAME} ${LIB_TYPE} ${SOURCE})

# with ${LIB_TYPE} = STATIC or SHARED

more informations about cmake

如果您还有更多问题或者我的回答对您的回答还不够,请说明您的问题。

关于c++ - Cmake 仅链接到可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839313/

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