c++ - 如何设置库 CMakeLists 以便 FetchContent 可以安装它?
问题描述
FetchContent 不知道如何将构建的代码复制到安装文件夹中,如果它获取的库在其 CMakeLists.txt 中缺少对 install() 的调用,则会失败。我当前的子库有安装命令,当我运行时父项目构建良好cmake CMakeLists.txt
。但是,跑步时make
我得到
fatal error: child/couts.h: No such file or directory
2 | #include "child/couts.h"
和同样的#include <child/couts.h>
。
如何将最简单的 install() 命令添加到我的子库以确保 FetchContent 能够正常工作?我正在 WSL 和 Visual Studio 上构建(尽管后者不是必需的。)我应该指出这个特定的库有命名空间。
以下是我的基本 CMakeLists.txt 与目录结构
- CMakeLists.txt
- 孩子
- *。H
- *.cpp
- couts.h # 例子
cmake_minimum_required(VERSION 3.11)
project("child")
# Target
set(PROJECT_NAME child)
# Source groups
include_directories(
${PROJECT_SOURCE_DIR}/child
)
file(GLOB all_SRCS
${PROJECT_SOURCE_DIR}/child/*.h
${PROJECT_SOURCE_DIR}/child/*.cpp
)
# Target
add_library(${PROJECT_NAME} STATIC ${all_SRCS})
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME})
install(EXPORT ${PROJECT_NAME} NAMESPACE mp_ DESTINATION lib/${PROJECT_NAME})
低于目标的所有内容都可以更改,因为我不确定它会做什么。
这是我父项目的 CMakeLists.txt
cmake_minimum_required (VERSION 3.11)
project ("parent")
include_directories(
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
)
file(GLOB all_SRCS
${PROJECT_SOURCE_DIR}/include/*.h
${PROJECT_SOURCE_DIR}/src/*.cpp
)
include(FetchContent)
FetchContent_Declare(
child
GIT_REPOSITORY ~ # proper url
GIT_TAG main
)
FetchContent_MakeAvailable(child) # add other fetched names here
add_executable(${PROJECT_NAME} "parent.cpp" "parent.h" ${all_SRCS})
target_link_libraries(${PROJECT_NAME} child) # add other fetched names here
解决方案
推荐阅读
- javascript - 如果 URL 已在选项卡中打开,则阻止在新选项卡中打开链接
- pyspark - 将 PySpark 密集列向量转换为行
- python - 在python中提取带空格的字符串
- sql-server - SQL Server 全文搜索 空目录
- javascript - 当函数参数为对象时,Javascript 的代码智能感知
- java - SXSSFWorkbook.dispose() 处的 NoSuchMethodError | 阿帕奇 POI
- php - 服务器发送未知字符集
- visual-studio-2017 - 有没有办法遍历 C++ 中的文本框值?
- python-2.7 - 使用python从演示文稿中读取嵌入对象
- c# - System.Diagnostics.Process 源中的空尝试 {},没有捕获,最终填充{} - 它有什么用?