如何创建一个 conan 包,包括对可在所有平台上打包的仅标头库的测试

问题描述

我正在尝试使用基于 CMake 和 CTest 的 conan 创建一个仅标头的包。它尽可能为空,只包含两个带有空 main() 函数的测试。

虽然 conan create . conantest/stable 在 linux 上运行良好,但会因错误而停止

conantest/0.1@conantest/stable: ERROR: Package '...' build Failed
conantest/0.1@conantest/stable: WARN: Build folder C:\Users\...\.conan\data\conantest\0.1\conantest\stable\build\...
ERROR: conantest/0.1@conantest/stable: Error in build() method,line 17
        cmake.test()
        ConanException: Error 1 while executing cmake --build "C:\Users\...\.conan\data\conantest\0.1\conantest\stable\build\..." --target test

在窗户上。

问题在于,在带有此示例的 Windows 上,cmake.test() 不会调用 multi-config RUN_TESTS 目标 as described here 而是 test

从文档中我得到的印象是它应该自动区分,但我也不知道这是正确的还是缺少什​​么来启用这种自动性。

可以通过提供设置来提示构建类型:

settings = "os","compiler","build_type","arch"

当 Conan 为一个给定的包生成编译后的二进制文件时 结合上面的设置,它会生成一个唯一的 ID 通过对这些设置的当前值进行散列来进行二进制。

但是 as described here 通常对于只有头文件的库,这些通常被显式设置为 None

据我所知,测试仅在打包期间构建和执行,但它们的二进制形式不是包的一部分。有没有办法只为一个唯一 ID 定义配方,同时仍然能够在任何平台上的打包过程中构建和运行测试?

测试项目可用 on git

这些是它的内容

CMakeLists.txt

cmake_minimum_required(VERSION 3.8.0)
project(conantest VERSION 0.1 LANGUAGES CXX)

include(CTest)
enable_testing()

add_executable(conantest1 conantest1.cpp)
add_test(conantest1 conantest1)
add_executable(conantest2 conantest2.cpp)
add_test(conantest2 conantest2)

conanfile.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from conans import ConanFile,CMake

class ConantestConan(ConanFile):
    name = "conantest"
    version = "0.1"
    generators = "cmake"
    exports_sources = "*"
    no_copy_source = True

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()
        cmake.test()
    def package(self):
        self.copy("*.hpp")
    def package_id(self):
        self.info.header_only()

conantest1.cpp 和 conantest2.cpp

#include <cstdlib>
int main() {
    return EXIT_SUCCESS;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)