代码之家  ›  专栏  ›  技术社区  ›  Joshua Maiche

为什么我的cmake测试中没有使用WORKIG_DIRECTORY?

  •  0
  • Joshua Maiche  · 技术社区  · 1 年前

    我正在尝试为CMake测试设置工作目录,但似乎无法使其工作。以下是我正在尝试使用的非常简单的测试:

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.24)
    set (CMAKE_CXX_STANDARD 17)
    
    project(working_directory_error LANGUAGES CXX)
    enable_testing()
    
    add_executable(main main.cpp)
    
    add_test(main_test main WORKING_DIRECTORY "C:/")
    

    main.cpp

    #include <filesystem>
    #include <iostream>
    
    int main()
    {
        std::filesystem::path workingDirectory = std::filesystem::current_path();
        bool workingDirectoryIsC = workingDirectory == std::filesystem::path("C:/");
        std::cout << "Working directory is " << workingDirectory << " which is "
        << (workingDirectoryIsC ? "right" : "wrong") << std::endl;
        return workingDirectoryIsC ? 0 : 1;
    }
    

    安慰

    C:\dev\repros\working_directory_error>cmake -B out -G Ninja
    -- The CXX compiler identification is MSVC 19.37.32825.0
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/Hostx86/x86/cl.exe - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done (1.3s)
    -- Generating done (0.0s)
    -- Build files have been written to: C:/dev/repros/working_directory_error/out
    
    C:\dev\repros\working_directory_error>cmake --build out
    [2/2] Linking CXX executable main.exe
    
    C:\dev\repros\working_directory_error>ctest --test-dir out --output-on-failure
    Internal ctest changing into directory: C:/dev/repros/working_directory_error/out
    Test project C:/dev/repros/working_directory_error/out
        Start 1: main_test
    1/1 Test #1: main_test ........................***Failed    0.03 sec
    Working directory is "C:\\dev\\repros\\working_directory_error\\out" which is wrong
    
    
    0% tests passed, 1 tests failed out of 1
    
    Total Test time (real) =   0.03 sec
    
    The following tests FAILED:
              1 - main_test (Failed)
    Errors while running CTest
    

    我在Windows上尝试过MSVC和Ninja生成器,在Linux上也尝试过使用WSL的Ninja生成器。我试着从 out 文件夹在案例中 --test-dir 以某种方式覆盖了工作目录。似乎什么都不起作用。

    有什么明显的东西我遗漏了吗?

    0 回复  |  直到 1 年前
        1
  •  1
  •   jpr42    1 年前

    请尝试以下操作:

    add_test(NAME main_test COMMAND main WORKING_DIRECTORY "C:/")
    

    我认为问题是你使用的是更老、更不灵活的形式 add_test .

    与上面的NAME签名不同,命令行中不支持目标名称。