小编PK *_*out的帖子

在cmake中使用特定于平台的分隔符的正确方法

你好,亲爱的stackoverflowers!

我想知道我的问题是否有更好的解决方案.我正在开发一个独立于平台的软件项目,并希望将基于python的单元测试添加到cmake.我现在遇到的问题是,在配置ctest测试并设置正确的PYTHONPATH环境变量以运行我的测试时,我最终会为每个测试提供大量的样板代码:

add_test(my_awesome_test ${PYTHON_EXECUTABLE} my_awesome_test.py)

if("${CMAKE_HOST_SYSTEM}" MATCHES ".*Windows.*")
  set_tests_properties(my_awesome_test PROPERTIES ENVIRONMENT "PYTHONPATH=somepath\;anotherpath")
else() # e.g. Linux
  set_tests_properties(my_awesome_test PROPERTIES ENVIRONMENT "PYTHONPATH=somepath:anotherpath")
endif()

# more tests like this after this...
Run Code Online (Sandbox Code Playgroud)

这里的问题是分支,这只是因为平台相关的列表分隔符才需要.

有没有更简洁的方法来实现这一目标?

是否有一个常量指定平台分隔符或允许我构造这些列表的函数?


如果没有"正确"的答案,我也想分享我明显但不太好的解决方案:

if("${CMAKE_HOST_SYSTEM}" MATCHES ".*Windows.*")
  set(SEP "\\;")
else() # e.g. Linux
  set(SEP ":")
endif()

add_test(my_awesome_test ${PYTHON_EXECUTABLE} my_awesome_test.py)
set_tests_properties(my_awesome_test PROPERTIES ENVIRONMENT "PYTHONPATH=somepath${SEP}anotherpath")

# more tests like this after this...
Run Code Online (Sandbox Code Playgroud)

在Windows上";" 必须进行双重转义,否则它将在add_test行中稍后替换为单个";" 再次,然后将其解释为导致错误结果的cmake-list分隔符.但是,让cmake报告哪个字符应该用作列表分隔符仍然会更好...

cross-platform cmake

6
推荐指数
1
解决办法
2597
查看次数

如何为支持同步和异步接口的库生成 python 类型信息?

我在 Python 中的输入和类型提示方面都遇到问题。我准备了一个(可执行)示例,展示了我所面临的应该公开同步和异步接口的库的问题。这显然是一个简化的示例,消除了噪音并专注于当前的问题:

import asyncio
import time

class CommonFunctions:
    # I want to use this as the interface defintion
    # for my async and sync implementations below
    
    def do_something(self, i: int, text: str = "hello world") -> str:
        return text * i
    
    def do_something_else(self, i: int, j: int) -> str:
        return i * j

    # Imagine more functions here... This is 
    # the library and where most development happens.


class SyncLib(CommonFunctions):
    def __complex_operation(self):
        # This is a standin for sync-api …
Run Code Online (Sandbox Code Playgroud)

asynchronous interface typing type-hinting python-3.x

5
推荐指数
1
解决办法
431
查看次数