首页 > 解决方案 > 如何设置库 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 与目录结构

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

标签: c++cmake

解决方案


推荐阅读