Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to put generated files (e.g. object files) into a separate folder when using Qt/qmake?

I have a Qt project that uses qmake. To improve clarity and readability, I'd like to keep the

  • source files
  • build system
  • generated files (such as object files)

separate.

So my first step was putting the source files into a src/ sub directory:

myproject/
    myproject.pro
    src/
        main.cpp
        MainWindow.ui
        ...

That way I separated the source files from the build system (*.pro). However, when I then run qmake followed by make, the generated files (object files, etc) are placed into the main project folder:

myproject/
    myproject.pro
    Makefile
    main.o
    ui_MainWindow.h
    ...
    src/
        main.cpp
        MainWindow.ui
        ...

Well, at least they weren't put into the src/ folder, but how do I specify that they are put into another sub folder such as build/?

myproject/
    myproject.pro
    Makefile
    build/
        main.o
        ui_MainWindow.h
        ...
    src/
        main.cpp
        MainWindow.ui
        ...

(BTW, I don't care where the target binary myproject is put, but I guess it should be placed directly into project folder rather than into build/.)

like image 609
vog Avatar asked Aug 09 '10 13:08

vog


2 Answers

You can add the following lines to your *.pro file:

DESTDIR=bin #Target file directory
OBJECTS_DIR=generated_files #Intermediate object files directory
MOC_DIR=generated_files #Intermediate moc files directory

A list of variables is available at the following locations:

  • Qt 4.8
  • Qt 5
like image 179
Bowdzone Avatar answered Sep 23 '22 16:09

Bowdzone


https://wiki.qt.io/Undocumented_QMake#Config_features

object_with_source — outputs each object file into the same directory as its source file (replaced by object_parallel_to_source in the latest versions).
object_parallel_to_source — recreate source folder tree for object files (replaces object_with_source).

in *.pro write

CONFIG += object_parallel_to_source
like image 26
nic Avatar answered Sep 22 '22 16:09

nic