CMake cannot find test if CMAKE_RUNTIME_OUTPUT_DIRECTORY is changed

前端 未结 3 1142
时光说笑
时光说笑 2021-02-07 03:57

I\'m building my project with CMake, and I\'m trying to create a bunch of test suites for each module. Apparently if I modify the variable CMAKE_RUNTIME_OUTPUT_DIRECTORY

3条回答
  •  误落风尘
    2021-02-07 04:41

    edit :

    actually I missed something in the documentation for add_test:

    If COMMAND specifies an executable target (created by add_executable) it will automatically be replaced by the location of the executable created at build time

    So using ttest instead of $ should work.


    I got the same problem but I do not really know if it is a bug or not.

    The solution I found for this is providing the path of the test executable in the command (with the target ttest):

    in test/CMakeLists.txt :

    add_test(ttest test/ttest)
    

    Eventually, you would like to store the path in a variable in order to write something like ${test_dir}/ttest.

    If you want something more robust, the best is to use the long add_test command and generator expressions :

    add_test(NAME ttest COMMAND $)
    

    The generation expression $ will expand to the output file of the executable target (ttest here), so you are sure there is no problem with the directory. There is other expression referenced in cmake documentation.

    It can get a little verbose if you have lot of tests to declare so I use a macro like :

    macro (create_test target)
      add_test (NAME ${target} COMMAND $)
    endmacro (create_test)
    
    #[some code]
    
    #test definition
    create_test(ttest)
    

    Assuming the test name is the same as the executable name.

    I could not find any other working solution. It is possible to set the working directory with add_test, which apparently make ctest find the executable but the test then crashes with a "BAD_COMMAND" error.

    I'm new with cmake, so may be there is another solution.

提交回复
热议问题