【发布时间】:2021-08-02 09:02:01
【问题描述】:
以前,我正在寻找此类问题,但没有一个可以作为示例 this thread 和 this one。
目前,我正在创建一个 C 库,它应该在 ./include 目录中输出一个共享库(*.so 或 *.dll)文件和多个 *.h 文件。共享库已成功构建并安装到/usr/local/lib。但是,我不知道如何告诉 CMake 将 *.h 文件复制到正确的目的地,如下所示。
- 在 POSIX 中:
/usr/local/include - 在 Windows 中:
C:\<Compiler Path>\include
我知道我可以通过使用 Python 脚本复制那些 *.h 或在 CMake 上使用 if-else 逻辑来解决此问题。但至少告诉我 CMake 中是否有一个功能可以做这件事。谢谢!
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project (
learn_c_library
VERSION 1.0.0
LANGUAGES C
)
# Specify CMake build and output directory
set(CMAKE_BINARY_DIR "${PROJECT_SOURCE_DIR}/.cmake")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out")
# Use every .c file inside ./src
file(GLOB_RECURSE MY_SOURCE_PATH "src/*")
add_library(
${PROJECT_NAME} SHARED
${MY_SOURCE_PATH}
)
include_directories(
${PROJECT_NAME}
"include/"
)
# Allows "make install" to install shared library
install(TARGETS ${PROJECT_NAME})
【问题讨论】:
-
你能告诉我们你当前的 CMakeLists.txt 是什么样的吗?通常你的 CMake 文件定义 what 来安装,调用者定义 where 来安装它,但是如果你真的必须的话,你可以覆盖它。
-
@Botje 当然,我编辑了问题
-
It is best practice to not use globs in CMake,但如果你绝对拒绝列出你的来源,那么至少非常非常至少使用
CONFIGURE_DEPENDS。 -
从不设置变量
CMAKE_BINARY_DIR。此变量由 CMake 自动设置,CMake 对其值有预期。但是设置您(或构建您的项目的人)的变量可能会面临许多微妙的错误。最好假设变量CMAKE_BINARY_DIR是只读变量。 -
@AlexReinking 哇,这是我应该在重建之前删除 CMakeFiles 目录的唯一原因。我喜欢你的博客,谢谢分享!