问题描述
我正在尝试使用基于 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 (将#修改为@)