[CMake] Out-of-source build and access to data

Benjamin Kurz benjamin.kurz at bioskill.com
Wed Jan 26 11:25:45 EST 2011


ok, sorry, let's make it more real. I cannot disclose much code, but
it's like this:

I have a normal Qt application started out of a main.cpp which is
located in $SOURCE_DIR/src
In another QWidget also located in $SOURCE_DIR/src I call a function
which is also declared in $SOURCE_DIR/src
with something like this:
loadfile("./data/file1");

if I build the application in-source it works fine.
if I build it in a different place, let's say $BUILD_DIR, it does not
work anymore.

The executables in both cases are on the top level of $SOURCE_DIR
(in-source build) or at the top level of $BUILD_DIR (out-of-source build).

I copy the files with cmake with the following:
file(COPY ${PROJECT_SOURCE_DIR}/data DESTINATION ./)
this works fine, the files are copied and are in the same hierarchy as
in the source tree.

Maybe it's not even a full cmake question, if so I am sorry for that.
But somehow I have to tell my code where to find a file when I have an
out-of-source build.

Hope that clearified it a bit, and did not make it less understandable. :)

Thanks so far.

Benjamin

Am 26.01.2011 16:12, schrieb David Cole:
> Send some code for us to look at.
>
> If the cwd is where your exe is, and there's a file at "./data/file1"
> then you should certainly be able to open and read that file with that
> file name.
>
> Maybe your cwd is not what you think it is.
> Maybe your code changes it somewhere between launching and attempting
> to open the file.
>
> I don't understand where you're using a
> filepath = "./data/file1"
> reference? In your source code? In a settings file of some sort?
> Certainly not in a CMakeLists.txt file since this is not cmake
> syntax...
>
>
> ??
>
> David
>
>
> On Wed, Jan 26, 2011 at 9:54 AM, Benjamin Kurz
> <benjamin.kurz at bioskill.com> wrote:
>   
>> Hello everyone,
>>
>> Currently I'm using cmake for building my c++/Qt project.
>> The source directory structure looks like this:
>> Project
>> |_ src
>> |_ include
>> |_ data
>>
>>
>> Currently I run cmake from the source directory, having an in-source-build.
>> Now I want to be able to have a complete seperate build folder.
>> It compiles fine and it runs ok, unless I need access to a file in the
>> data folder.
>> Currently I access files like this: filepath = "./data/file1"
>> But data is of course not available in the build directory.
>> So I copied the files during the cmake process, which also works fine.
>>
>> But when I run the program I get an exception because the file is not found.
>> I tried a lot of possibilities:
>> filepath = "../data/file1"
>> filepath = "data/file1"
>> filepath = "file1"
>>
>> but nothing seems to work.
>>
>> The executable is on the top directory in the build directory.
>> The filepath is defined and used in a class in ./src directory.
>>
>> I am not sure how to fix this or which path to use?!
>>
>> Any advice is appreciated.
>>
>> Thanks
>>
>> Benjamin
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.cmake.org/mailman/listinfo/cmake
>>
>>     



More information about the CMake mailing list