Hi,

I'm not sure, if I am doing something wrong, so I made a small example program 
+ cmake script to show the difference between the working_directory option in 
custom targets and the testing option.

My folder structure is very simple:

./file.txt (fill it with one simple text line)
./reader.hpp (a small c++ class for reading the content of file.txt
./main.cpp (main class for calling the reader.hpp to read the content
./main_test.cpp (boot unit test, fails, when the file is empty or does not 
exist)


reader.hpp:

#include <fstream>

struct reader {
        static inline std::string get_content() {
                std::ifstream input_fs("file.txt");
                std::string content;
                std::getline(input_fs, content);
                return content;
        }
};

main.cpp:

#include "reader.hpp"
#include <iostream>

auto main() -> int {
        std::cout << reader::get_content() << std::endl;
        return 0;
}

main_test.cpp:

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE abbreviation_test

#include <boost/test/unit_test.hpp>
#include "reader.hpp"

BOOST_AUTO_TEST_CASE(read_file_content)
{
        std::string content = reader::get_content();
        bool has_content = content.length() > 0;
        BOOST_CHECK_EQUAL(has_content, true);
}


And my cmake script:


cmake_minimum_required (VERSION 2.6)
project (workingdir)

find_package(Boost 1.44.0 COMPONENTS unit_test_framework REQUIRED)

add_definitions("-Wall -std=c++0x")

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

include_directories("${PROJECT_SOURCE_DIR}")
include_directories("${PROJECT_BINARY_DIR}")

add_executable (workingdir main.cpp)
target_link_libraries(workingdir)

add_executable(workingdir_test main_test.cpp)
target_link_libraries(workingdir_test ${Boost_LIBRARIES})

add_custom_target (
  run0
  DEPENDS workingdir_test
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  COMMAND workingdir_test
)

enable_testing()

add_test (
  Workingdir_test  ${EXECUTABLE_OUTPUT_PATH}/workingdir_test
  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)



To test it: 

mkdir build && cd build
cmake ..
make

Now I could run the custom target with "make run0" -> it will show the 
"file.txt" content, because I set the working directory to the project source 
dir.

But: When I try to run "make test" -> although I set the working directory, the 
test will fail. I guess the working directory is ./build and not ./


How can I set the working directory to ${PROJECT_SOURCE_DIR} correctly for my 
testcases?


Thanks in advance + regards,


Stefan

PS: I am using cmake version 2.8.12.1 on Arch.

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to