【发布时间】:2021-12-22 13:43:57
【问题描述】:
我有一个项目,它使用 CMake 作为构建工具,并为我和我的同事制作了一个简单的模板。当我在网上搜索最佳且易于使用的做法时,我发现了创建库的不同方法。
在这个模板中,我在两个单独的变量中列出了头文件和源文件,我没有将头文件传递给add_library 命令——只是源文件。然后我使用set_target_properties 和PUBLIC_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}
)
【问题讨论】:
标签: cmake