Cmake-4

Step4:安装和测试

1)对于MathFunctions我们想安装库和头文件,但是对于应用程序我们安装可执行程序和配置头文件。

MathFunctions/CMakeLists.txt的末尾增加如下:

install(TARGETS MathFunctions DESTINATION lib)
install(FILES MathFunctions.h DESTINATION include)

在上一级的CMakeList中增加:

install(TARGETS Tutorial DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  DESTINATION include
  )

生成的 Demo 文件和 MathFunctions 函数库 libMathFunctions.o 文件将会被复制到 /usr/local/bin 中,而 MathFunctions.h 和生成的 config.h 文件则会被复制到 /usr/local/include 中

2)测试

enable_testing()

# does the application run
add_test(NAME Runs COMMAND Tutorial 25)

# does the usage message work?
add_test(NAME Usage COMMAND Tutorial)
set_tests_properties(Usage
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number"
  )

# define a function to simplify adding tests
function(do_test target arg result)
  add_test(NAME Comp${arg} COMMAND ${target} ${arg})
  set_tests_properties(Comp${arg}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result}
    )
endfunction(do_test)

# do a bunch of result based tests
do_test(Tutorial 4 "4 is 2")
do_test(Tutorial 9 "9 is 3")
do_test(Tutorial 5 "5 is 2.236")
do_test(Tutorial 7 "7 is 2.645")
do_test(Tutorial 25 "25 is 5")
do_test(Tutorial -25 "-25 is [-nan|nan|0]")
do_test(Tutorial 0.0001 "0.0001 is 0.01")

以下内容引用自:

原文链接:https://blog.youkuaiyun.com/qq_38450982/article/details/89156116

add_test():

运行的项目中添加测试。

add_test(<name> <command> [<arg>...])

 添加一个名为<name>的测试。测试名称不包含空格、引号或CMake语法中特殊的其他字符。

<command>指定测试命令行。如果<command>指定了一个可执行目标(由add_executable()创建),它将被在构建时创建的可执行文件的位置自动替换。

<arg>为传递给<command>的参数。

set_tests_properties()对测试属性进行设置,函数原型如下:

set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2 value2)

PROPERTIES 包括有WILL_FAIL、PASS_REGULAR_EXPRESSION、FAIL_REGULAR_EXPRESSION。代码中用到的是PASS_REGULAR_EXPRESSION,如果设置了这个属性,测试输出将根据指定的正则表达式进行检查,并且至少有一个正则表达式必须匹配,否则测试失败。如我们以第一个测试为例:

  1. add_test (TutorialComp25 Tutorial 25)

  2. set_tests_properties (TutorialComp25 PROPERTIES PASS_REGULAR_EXPRESSION "25 is 5")

添加一个名为TutorialComp25的测试,调用可执行文件Tutorial, Tutorial的功能是计算平方根,并且传给它的参数为25。然后设置测试TutorialComp25的属性,将输出根据指定的正则表达式即“25 is 5”进行匹配,如果匹配成功,则测试成功,否则则失败。


 

<think>嗯,用户遇到了在编译Box2D时出现的CMake错误,具体是FetchContent在处理enkits时失败。我需要先理解这个错误的背景和可能的原因。 首先,错误信息显示CMake在FetchContent步骤中失败了,涉及enkits。可能的原因包括网络问题导致依赖下载失败,或者CMake脚本配置有误。另外,检查CMake版本是否过低也是个好主意,因为旧版本可能有兼容性问题。 接下来,用户使用的CMake路径是F:/CMake/share/cmake-4.0,看起来像是CMake 4.0,但官方CMake版本中并没有4.0,最新的稳定版是3.x系列。这可能意味着用户的CMake安装有问题,或者路径命名有误,导致版本识别错误。需要建议用户检查CMake版本是否正确安装。 另外,enkits可能是指某个第三方库,比如可能是拼写错误,应该是某个具体的依赖项目,比如可能是entt或者其它库。用户可能在CMakeLists.txt中错误地引用了这个依赖,或者该项目的仓库地址已经变更,导致下载失败。需要用户检查CMakeLists.txt中FetchContent部分是否正确配置了URL或版本。 此外,网络问题可能导致FetchContent无法下载依赖项,特别是如果用户处于受限的网络环境,或者依赖仓库需要代理访问。建议用户尝试手动下载依赖项,或者配置代理设置。 还有,检查CMake的输出日志,查看更详细的错误信息,可能会提示具体的下载失败原因,比如404 Not Found或者连接超时。用户可能需要打开CMake的详细输出模式来获取更多信息。 最后,建议用户升级CMake到最新版本,因为新版本可能修复了旧版本中的一些问题,特别是FetchContent模块的改进。同时,确保Box2D的源码是最新的,可能问题已经在最新版本中被修复。 总结可能的解决步骤:检查CMake版本,确认依赖配置正确,解决网络问题,手动下载依赖,升级CMake,查看详细日志。需要将这些步骤清晰地传达给用户,帮助他们逐步排查问题。</think>在编译Box2D时遇到CMake的`FetchContent`错误,通常与依赖项下载或配置相关。以下是分步排查和解决方案: --- ### **1. 错误原因分析** 从报错信息`CMake step for enkits failed: 1`可以看出: - **关键问题**:CMake在通过`FetchContent`模块下载或配置名为`enkits`的依赖项时失败。 - **可能原因**: - 网络问题(无法访问GitHub或依赖仓库) - 依赖仓库URL变更或版本标签不存在 - CMake版本过低导致兼容性问题 - 本地文件权限不足 --- ### **2. 基础排查步骤** #### **步骤1:检查网络连接** - 确保能访问GitHub(如尝试在浏览器打开`https://github.com`)。 - 若使用代理,需在CMake或系统环境变量中配置代理: ```bash set http_proxy=http://your_proxy:port set https_proxy=http://your_proxy:port ``` #### **步骤2:验证CMake版本** - 当前使用的CMake路径为`F:/CMake/share/cmake-4.0`,但官方CMake最新版本为3.x系列(如3.28.3)。建议: 1. 卸载当前CMake。 2. 从[CMake官网](https://cmake.org/download/)下载最新版本(≥3.20)。 3. 重新配置环境变量。 #### **步骤3:检查依赖项配置** - 打开Box2D的`CMakeLists.txt`,定位到第123行附近(报错位置`CMakeLists.txt:123`): ```cmake FetchContent_MakeAvailable(...) # 此处可能调用了enkits ``` - 确认`enkits`的仓库地址是否有效。例如: ```cmake FetchContent_Declare( enkits GIT_REPOSITORY https://github.com/xxx/enkits.git GIT_TAG v1.0 # 检查标签是否存在 ) ``` --- ### **3. 手动下载依赖项** 若自动下载失败,可手动下载依赖项并配置本地路径: 1. 从`enkits`的仓库(如GitHub)下载源码,解压到本地目录(如`D:/libs/enkits`)。 2. 修改`CMakeLists.txt`,替换`FetchContent`部分为本地路径: ```cmake add_subdirectory(D:/libs/enkits) ``` --- ### **4. 启用CMake详细日志** 通过`--debug-output`参数获取详细错误信息: ```bash cmake -B build --debug-output ``` 检查日志中与`enkits`相关的下载请求和错误提示(如HTTP 404)。 --- ### **5. 其他可能性** - **防病毒软件拦截**:临时关闭防火墙或杀毒软件。 - **文件权限问题**:以管理员身份运行CMake或IDE。 - **源码完整性**:重新克隆Box2D仓库,确保无文件损坏: ```bash git clone --recursive https://github.com/erincatto/Box2D.git ``` --- ### **总结步骤** 1. 升级CMake到最新版。 2. 检查`enkits`的仓库地址和版本标签。 3. 手动下载依赖项或配置代理。 4. 查看详细日志定位具体错误。 若问题仍未解决,请提供完整的CMake日志和`CMakeLists.txt`相关代码段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值