UVA 11044 - Searching for Nessy

本文介绍了解决简单编程问题的策略,通过实例分析,展示了如何快速找到解题思路,特别关注边界条件的处理,确保算法的有效性和效率。

解题思路:水题目一枚,直接代码吧,注意的是最外面边界不用考虑

the border cells do not need to be controlled, because Nessy cannot hide there (she is too big).

 

#include<stdio.h>
#include<math.h>
#include<stdlib.h>


int main()
{
    int n,m,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        int a,b;
        a=b=0;
        if((n-2)%3)
        {
            a=(n-2)/3+1;
        }
        else
        {
            a=(n-2)/3;
        }
        if((m-2)%3)
        {
            b=(m-2)/3+1;
        }
        else
        {
            b=(m-2)/3;
        }
        printf("%d\n",a*b);
    }
    return 0;
}


 

add_executable(vel_node src/vel_node.cpp) add_dependencies(vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(vel_node ${catkin_LIBRARIES} ) -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-transport8 -- found version 8.5.0 -- Searching for dependencies of ignition-transport8 -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.3.2 -- Checking for module 'uuid' -- Found uuid, version 2.34.0 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Searching for dependencies of ignition-msgs5 -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found suitable version "3.6.1", minimum required is "3") -- Looking for ignition-math6 -- found version 6.15.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 6.2.0 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Looking for ignition-common3 -- found version 3.17.0 -- Searching for dependencies of ignition-common3 -- Looking for dlfcn.h - found -- Looking for libdl - found -- Searching for <ignition-common3> component [graphics] -- Looking for ignition-common3-graphics -- found version 3.17.0 -- Searching for dependencies of ignition-common3-graphics -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-fuel_tools4 -- found version 4.9.1 -- Searching for dependencies of ignition-fuel_tools4 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.2.2 -- Checking for module 'libzip' -- Found libzip, version 1.5.1 -- Looking for ignition-common3 -- found version 3.17.0 -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Configuring done CMake Error at vel_pkg/CMakeLists.txt:207 (add_executable): Cannot find source file: src/vel_node.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx CMake Error at vel_pkg/CMakeLists.txt:207 (add_executable): No SOURCES given to target: vel_node CMake Generate step failed. Build files cannot be regenerated correctly. make: *** [Makefile:2840:cmake_check_build_system] 错误 1 Invoking "make cmake_check_build_system" failed
最新发布
11-24
<think> 我们遇到的问题是在执行`add_executable(vel_node src/vel_node.cpp)`时,CMake报错,提示找不到`src/vel_node.cpp`文件,并且说没有为目标`vel_node`提供源文件。这通常是因为CMakeLists.txt中指定的源文件路径不正确或者文件不存在。 ### 问题分析 1. **文件路径错误**:CMakeLists.txt中指定的`src/vel_node.cpp`文件可能不存在于该路径下。 2. **文件命名错误**:文件名可能被错误拼写(例如大小写、后缀名等)。 3. **项目结构问题**:源文件可能不在`src`目录下,或者被放在其他子目录中。 ### 解决方案 #### 步骤1:确认文件路径和文件名 - 进入ROS功能包目录: ```bash roscd your_package_name # 替换为你的功能包名 ``` - 检查`src`目录下是否存在`vel_node.cpp`文件: ```bash ls src/vel_node.cpp ``` 如果不存在,尝试使用`find`命令查找: ```bash find . -name vel_node.cpp ``` #### 步骤2:修正CMakeLists.txt中的路径 根据实际路径修改`add_executable`命令: - 如果文件在`src`目录下,但文件名有误(例如`Vel_Node.cpp`),则修正为正确的文件名(注意区分大小写): ```cmake add_executable(vel_node src/Vel_Node.cpp) # 修正文件名 ``` - 如果文件在`src`的子目录中(例如`src/nodes/vel_node.cpp`): ```cmake add_executable(vel_node src/nodes/vel_node.cpp) # 修正路径 ``` #### 步骤3:检查文件是否存在 如果确认文件不存在,需要重新创建: ```bash touch src/vel_node.cpp # 创建空文件(仅用于测试,实际应补充代码) ``` #### 步骤4:完整CMakeLists.txt示例 确保你的CMakeLists.txt包含必要的依赖和配置: ```cmake cmake_minimum_required(VERSION 3.0.2) project(your_package) # 查找依赖包 find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) # 包含目录 include_directories( include ${catkin_INCLUDE_DIRS} ) # 添加可执行文件(根据实际路径调整) add_executable(vel_node src/vel_node.cpp) # 添加依赖 add_dependencies(vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ) # 链接库 target_link_libraries(vel_node ${catkin_LIBRARIES} ) ``` ### 常见错误场景 1. **文件路径大小写不一致**(Linux区分大小写): - 实际文件:`Vel_Node.cpp` - CMake指定:`vel_node.cpp` → 报错 2. **文件被误放在其他目录**: - 例如文件在`src`目录的子文件夹`nodes`中,但CMake中写的是`src/vel_node.cpp` 3. **文件尚未创建**: - 在编写CMakeLists.txt时,源文件还未创建,导致编译失败。 ### 调试技巧 - 使用`catkin_make --force-cmake`强制重新生成CMake缓存。 - 使用`ls -l src/`查看文件详细信息,确保文件名正确。 ### 总结 > 该错误的核心是**源文件路径与CMake配置不匹配**。通过检查文件实际位置并修正CMakeLists.txt中的路径即可解决[^1][^2]。 §§相关问题§§ 1. CMake中如何正确指定源文件路径? 2. ROS功能包中源文件应该放在什么位置? 3. 如何解决CMake找不到源文件的错误? 4. ROS编译时出现"No such file or directory"错误如何解决? 5. 如何检查ROS功能包中的文件路径? </think> ### 解决CMake执行`add_executable`报错的完整指南 当CMake提示"找不到src/vel_node.cpp文件"和"没有为目标vel_node提供源文件"错误时,通常由以下原因导致: --- ### 一、核心问题诊断 1. **文件路径错误** CMakeLists.txt中指定的路径与实际文件位置不匹配 2. **文件不存在** `vel_node.cpp`未创建或文件名拼写错误 3. **构建系统缓存问题** 旧构建缓存导致路径检测失败 --- ### 二、逐步解决方案 #### 步骤1:验证文件路径 在终端执行: ```bash # 进入功能包目录 roscd your_package # 替换为你的功能包名 # 检查文件是否存在 ls -l src/vel_node.cpp # 如果不在src根目录,查找实际位置 find . -name vel_node.cpp ``` #### 步骤2:修正CMakeLists.txt 根据实际路径修改: ```cmake # 情况1:文件在src根目录(正确情况) add_executable(vel_node src/vel_node.cpp) # 情况2:文件在src子目录 add_executable(vel_node src/nodes/vel_node.cpp) # 示例 # 情况3:文件名大小写不匹配(Linux区分大小写) add_executable(vel_node src/Vel_Node.cpp) # 首字母大写示例 ``` #### 步骤3:处理文件不存在的情况 ```bash # 创建空文件(临时解决方案) touch src/vel_node.cpp # 或创建完整模板(推荐): cat <<EOF > src/vel_node.cpp #include <ros/ros.h> int main(int argc, char** argv) { ros::init(argc, argv, "vel_node"); ros::NodeHandle nh; ROS_INFO("Velocity node started"); ros::spin(); return 0; } EOF ``` #### 步骤4:清理并重建 ```bash # 强制清理构建缓存 cd ~/catkin_ws rm -rf devel build # 重新编译 catkin_make --force-cmake # 详细日志(查看具体错误) catkin_make -DCMAKE_BUILD_TYPE=Debug --verbose ``` --- ### 三、完整CMakeLists.txt示例 ```cmake cmake_minimum_required(VERSION 3.0.2) project(your_package) # 1. 声明依赖 find_package(catkin REQUIRED COMPONENTS roscpp geometry_msgs # 处理cmd_vel消息所需[^3] ) # 2. 包含目录 include_directories( include ${catkin_INCLUDE_DIRS} ) # 3. 添加可执行文件(路径必须正确!) add_executable(vel_node src/vel_node.cpp) # 验证路径 # 4. 添加依赖 add_dependencies(vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ) # 5. 链接库 target_link_libraries(vel_node ${catkin_LIBRARIES} ) ``` --- ### 四、常见错误场景 1. **路径层级错误** ```cmake # 错误:多一层src目录 add_executable(vel_node src/src/vel_node.cpp) ❌ ``` 2. **文件名后缀错误** ```cmake # 错误:错误的后缀名 add_executable(vel_node src/vel_node.c) ❌ # 应为.cpp ``` 3. **拼写错误** ```cmake # 错误:拼写不一致 add_executable(vel_node src/velocity_node.cpp) ❌ # 实际文件名vel_node.cpp ``` > **关键检查点**:使用`ls -l`命令确认文件的**精确名称和大小写**,Linux系统严格区分大小写[^1][^2]。 --- ### 五、调试技巧 ```bash # 在CMakeLists.txt中添加调试信息 message(STATUS "当前路径: ${CMAKE_CURRENT_SOURCE_DIR}") file(GLOB SOURCES "src/*.cpp") message(STATUS "检测到的源文件: ${SOURCES}") ``` 执行后查看输出: ```bash catkin_make | grep "当前路径" -A 2 ``` 通过以上步骤,99%的源文件路径问题都能解决。如仍有问题,请提供完整的`tree`命令输出和错误日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值