我想知道是否有更好的解决方案来解决我的问题。我正在开发一个独立于平台的软件项目,希望在cmake中添加基于python的单元测试。现在遇到的问题是,在配置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...
问题在于需要进行分支,这是由于平台相关的列表分隔符所导致的。
有没有更简单的方法来解决这个问题?
是否有一个常量指定平台分隔符或一个函数允许我构建这些列表?
如果没有“正确”的答案,我也想分享我的显而易见但不太好的解决方案:
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...
在Windows上,";"必须双倍转义,否则它会在add_test行中被替换为单个";",这将被解释为cmake-list分隔符,导致错误的结果。但是,让cmake报告应该使用哪个字符作为列表分隔符仍然更好...
file(TO_NATIVE_PATH...
函数存在问题 - 它无法将以;
分隔的 CMake 列表转换为在 Unix 上以:
分隔的路径,因此这并不是一个真正的解决方案。 - Timmmm