gpt4 book ai didi

cmake - 为什么在 CMake 中将头文件添加到 ADD_LIBRARY/ADD_EXECUTABLE 命令中

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

我有一个使用 CMake 作为构建工具的项目,并为我和我的同事制作了一个简单的模板。当我在网上搜索最佳且易于使用的实践时,我遇到了创建库的不同方法。

在这个模板中,我在两个单独的变量中列出了头文件和源文件,我没有将头文件传递给 add_library命令 - 只是来源。然后我使用 set_target_propertiesPUBLIC_HEADER变量给出头文件列表。

到目前为止它似乎有效,但我想知道我是否让事情变得不必要地复杂。网上有些人也给 add_library 命令提供头文件,甚至不使用 set_target_properties诸如此类。

简而言之:

  • 我们应该将头文件包含到 add_library 中吗?或者我们不应该(作为最佳实践)?以及两种用法的影响。
  • 在 add_library/add_executable 中添加标题的目的是什么?即使没有它,它们似乎也能工作(似乎只是前向声明和符号)。请确认理解。


  • (这是我正在谈论的模板:)
    cmake_minimum_required(VERSION 3.1.0)

    project(lae CXX C)
    set(CMAKE_CXX_STANDARD 14)

    include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    )

    set(SOURCE_FILES
    ...
    )

    set(HEADER_FILES
    ...
    )

    set( PRIVATE_HEADER_FILES
    ...
    )

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

    set( REQUIRED_LIBRARIES
    ...
    )

    target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBRARIES} )

    SET_TARGET_PROPERTIES(
    ${PROJECT_NAME}
    PROPERTIES
    FRAMEWORK ON
    SOVERSION 0
    VERSION 0.1.0
    PUBLIC_HEADER "${HEADER_FILES}"
    PRIVATE_HEADER "${PRIVATE_HEADER_FILES}"
    ARCHIVE_OUTPUT_DIRECTORY "lib"
    LIBRARY_OUTPUT_DIRECTORY "lib"
    OUTPUT_NAME ${PROJECT_NAME}
    )

    最佳答案

    在我们的项目中,我们使用您的“简单”方式 - add_library带有标题和来源。

    如果仅添加源,则在 IDE 生成的项目中将看不到标题。

    但是在安装的时候,我们就得这样了,用两个install命令:

    install(TARGETS library_name
    LIBRARY DESTINATION lib)

    install(FILES ${PUBLIC_HEADERS}
    DESTINATION include/library_name)

    如果您想将其作为单个命令执行,可以使用 set_target_propertiesPUBLIC_HEADER ,正如你所建议的。
    那么,这种 install是可能的:
    install(TARGETS library_name
    LIBRARY DESTINATION lib
    PUBLIC_HEADER DESTINATION include/library_name)

    选择你最喜欢的那个并坚持下去。

    关于cmake - 为什么在 CMake 中将头文件添加到 ADD_LIBRARY/ADD_EXECUTABLE 命令中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36174499/

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