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

2

19

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/.)

Hancock answered 9/8, 2010 at 13:20 Comment(0)
S
27

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:

Sverdlovsk answered 11/4, 2014 at 8:13 Comment(1)
It works for me. Note however that the following don't seem to work as a way to use the root of the build directory: DESTDIR= #doesn't work DESTDIR=. #doesn't workDemilune
C
2

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
Crystallo answered 30/5, 2018 at 20:30 Comment(1)
Nothing change!Grommet

© 2022 - 2024 — McMap. All rights reserved.