Github 我可以阻止或跳过来自第三方回购的add_可执行文件吗?cmakeftchcontent\u声明

Github 我可以阻止或跳过来自第三方回购的add_可执行文件吗?cmakeftchcontent\u声明,github,cmake,Github,Cmake,当使用cmake包含第三方回购时,clion中的列表将显示所有可执行文件和测试。尽管discord建议使用将您排除在所有之外,这会有所帮助。因为当我构建所有的时候,它会阻止这些额外的东西构建 我想要的只是图书馆。跳过第三方cmake文件中的添加可执行文件行 如果我有一个与它们同名的可执行文件,它将显示一个错误,例如: add_可执行文件无法创建目标“ut_1”,因为另一个目标具有 已存在相同的名称。现有目标是一个可执行文件 在源目录中创建 大宗报价 不幸的是,这是FetchContent方法的一

当使用cmake包含第三方回购时,clion中的列表将显示所有可执行文件和测试。尽管discord建议使用
将您排除在所有
之外,这会有所帮助。因为当我构建所有的时候,它会阻止这些额外的东西构建

我想要的只是图书馆。跳过第三方cmake文件中的添加可执行文件行

如果我有一个与它们同名的可执行文件,它将显示一个错误,例如:

add_可执行文件无法创建目标“ut_1”,因为另一个目标具有 已存在相同的名称。现有目标是一个可执行文件 在源目录中创建

大宗报价


不幸的是,这是FetchContent方法的一个基本限制。一旦目标被添加,CMake就不提供删除目标的方法,FetchContent最终是对
add_子目录
的调用,它无法区分第一方目标和第三方目标

您唯一的办法是修补第三方构建。您可以通过分叉项目、尝试使用glitchy选项,或者通过与上游协作来命名其目标的名称空间来实现这一点


在设计要由FetchContent使用的库时,应始终使用
\uu
前缀(或仅使用
)。

好的,谢谢您提供的信息。我将确保在我的库中使用前缀,并且从现在开始。有人说可以让您将add_子目录中的任何内容放入名称空间。这应该会派上用场。虽然它已经工作了4年。由于
从所有
中排除\u,因此不再构建可执行文件,那么到底是什么问题?您是否因为所有外部项目的可执行文件都显示在CLion的目标列表中而更难找到您的可执行文件而感到恼火,还是因为您无法重用外部项目中使用的名称?因为取决于CLion如何实现他们的列表,第一个问题可能是可以解决的。我刚才还检查了您在这里用作示例的
ut
项目,它具有禁用添加测试、示例和基准可执行文件的选项。许多项目都有这样的选项,可以在不总是需要的情况下禁用部分项目。你找过这样的选择吗?我会查出来的。非常感谢。
    enable_testing()
    include(FetchContent)
    FetchContent_Declare(
            ut
            GIT_REPOSITORY https://github.com/boost-ext/ut.git
            GIT_TAG        v1.1.8
    )
    #FetchContent_MakeAvailable(ut)
    FetchContent_GetProperties(ut)
    if(NOT ut_POPULATED)
        FetchContent_Populate(ut)
        add_subdirectory(${ut_SOURCE_DIR} ${ut_BINARY_DIR} EXCLUDE_FROM_ALL)
    endif()