PRO File Documentation


Summary

A .pro file is not one format. The .pro extension is shared by many unrelated programs, so the first step is always to open it in a text editor and read the first lines. The most common technical case is a Qt qmake project file (plain text with lines like QT +=, SOURCES +=, TEMPLATE = app), edited in Qt Creator. Other programs, from PTC Creo to KiCad and Prolog, reuse the same extension.

Technical details

FeatureValue
Common full nameQt qmake Project File (dominant technical use)
File extension.pro
MIME typetext/plain
Format typeGeneric extension — usually plain-text configuration or script
NatureAmbiguous / overloaded: no single owning application
Qt developerThe Qt Company (qmake build system)
Qt introducedqmake, early 2000s
Also used byPTC Pro/ENGINEER (Creo), KiCad (pre-v6), Prolog source, TurboFloorPlan, IBM Cognos TM1
Byte orderN/A — text, no binary header
Magic numberNone — identify by contents, not a signature
EncodingUTF-8 / ASCII (text cases)
Open standardVaries by program; qmake syntax is documented
Qt specificationdoc.qt.io/qt-6/qmake-project-files.html
Related extensions.pri, .pro.user, .qbs, .cmake, .kicad_pro
Safe to inspectYes — text files carry no executable code
How to identify a .pro file

There is no magic number: .pro is a shared extension with no binary signature. Open it in a text editor and read the first lines. A Qt qmake project shows assignments such as TEMPLATE = app, QT += widgets, SOURCES += main.cpp and HEADERS +=. Readable logic clauses ending in . point to Prolog source. A KiCad pre-v6 project uses INI-style [section] keys. If the bytes are unreadable binary, the file belongs to a CAD or proprietary app (for example PTC Creo) and must be opened there.

What is a .pro file?

A .pro file has no single meaning. The extension is shared by many unrelated programs, most of which store plain text, so “PRO” names a suffix rather than a defined format. The database label “Profile file” reflects exactly that: there is no one structure to describe. The practical consequence is that the first move with any .pro file is to open it in a text editor and read the opening lines, which usually reveal which application created it.

The most common and clearly identifiable technical .pro file is a Qt qmake project file. Qt is a cross-platform C++ application framework, and qmake is its older build system. A qmake .pro is a script that tells the build tool how to compile a program. The rest of this page covers that case in detail, then lists the other programs that reuse the extension so you can tell them apart.

The qmake project file: variables and operators

A qmake .pro is a sequence of assignments to build variables. Each line names a variable and modifies it with an operator: = sets a value, += appends, -= removes, *= adds only if not already present, and ~= replaces by regular expression. Values are whitespace-separated tokens, and a trailing backslash continues a line. Comments start with #. A minimal project looks like this:

TEMPLATE = app          # build an application (vs lib, subdirs, aux)
TARGET   = myapp        # output binary name
QT      += core gui widgets   # Qt modules to link
CONFIG  += c++17        # build options / feature flags

SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
FORMS   += mainwindow.ui        # Qt Designer .ui files
RESOURCES += assets.qrc         # compiled-in resources

The core variables have fixed meanings. TEMPLATE selects what qmake generates: app for an executable, lib for a shared or static library, subdirs for a project that recurses into sub-projects, or aux for a project that builds nothing itself. TARGET sets the output name. QT lists the framework modules the code needs (core, gui, widgets, network, and so on), each of which adds the right include paths and libraries. CONFIG carries feature flags and build options such as c++17, debug, release or staticlib.

The file-list variables enumerate the project inputs: SOURCES and HEADERS for C++ code, FORMS for Qt Designer .ui layouts, and RESOURCES for .qrc resource collections. When qmake runs, FORMS entries are passed to the uic user-interface compiler and RESOURCES to the rcc resource compiler, whose generated code is added to the build automatically.

Scopes: platform-specific and conditional blocks

qmake supports conditional configuration through scopes. A scope is a condition followed by a brace-delimited block that applies only when the condition holds. This is how one .pro file describes a build that differs across platforms:

win32 {
    SOURCES += platform_win.cpp
    LIBS    += -luser32
}
unix:!macx {          # Linux but not macOS
    SOURCES += platform_x11.cpp
}
CONFIG(debug, debug|release) {
    DEFINES += APP_DEBUG
}

Built-in scope names include win32, unix, macx and android; they can be combined with : (logical AND) and negated with !. The special CONFIG() test inspects the active build configuration. Larger projects split shared settings into .pri include files pulled in with include(common.pri), keeping each .pro focused.

Running qmake on the project reads these variables and scopes and writes a platform-native Makefile (or a Visual Studio / Xcode project). The Makefile is what actually compiles the code, so the .pro is a level above the build: a portable description that qmake translates per platform. Newer Qt projects increasingly use CMake instead, but a large body of existing software still ships a .pro, and Qt provides a qmake2cmake helper to assist porting.

Other programs that use the .pro extension

Because the suffix is unclaimed, several unrelated applications adopted it. Each opens only in its own software, and none shares a structure with the others.

ProgramWhat the .pro holdsHow to open
Qt qmakeBuild project script (text)Qt Creator; run qmake
PTC Pro/ENGINEER (Creo)CAD configuration / part-related dataPTC Creo
KiCad (pre-v6)EDA project file (INI-style text)KiCad; v6+ migrates it to .kicad_pro JSON
PrologProlog source code (clauses)A Prolog interpreter such as SWI-Prolog
TurboFloorPlanHome/landscape design projectTurboFloorPlan
IBM Cognos TM1TurboIntegrator process scriptTM1 / Planning Analytics

Two of these are worth a note. KiCad changed its project format at version 6: the old text .pro became a JSON file with the .kicad_pro extension, and opening an old .pro in KiCad 6 or later migrates it in place (keep a backup first). Prolog source is also written as .pl, so a .pro full of readable logic clauses is program code, loaded and queried inside an interpreter rather than opened as a document.

Reading the file to find its owner

Since the extension does not identify the program, the contents do. Open the file in Notepad, TextEdit, VS Code or any editor and look at the first lines. Assignment lines such as QT +=, SOURCES += or TEMPLATE = app mean a Qt project. INI-style [section] headers point to an older KiCad project. Readable clauses ending in a full stop indicate Prolog. If the file opens as unreadable binary rather than text, it belongs to a proprietary application (most often PTC Creo) and only that program will make sense of it. Where the file came from is another strong clue: a project handed over by a Qt developer, a drawing from a Creo user, and so on.

There is deliberately no universal “PRO viewer” on this page, because no single tool opens all of them. A plain text editor is the closest thing to a universal opener, since most .pro files are text, and it is also the safest first step: reading a text file cannot execute anything.

Frequently asked questions

Why isn't there one answer for what a .pro file is?

Because the extension was never reserved for a single format. Independent programs each chose .pro for their own project or configuration files, so the same three letters cover Qt build scripts, CAD data, EDA projects, Prolog code and more. Only the file’s contents, or the program it came from, settle which one you have.

How do I open a Qt .pro file?

Install Qt Creator (the free open-source edition) and use File › Open File or Project, then select the .pro. Qt Creator loads the project and can build it. From a terminal, running qmake on the file generates a Makefile you can then build with make.

My old KiCad .pro won't open in new KiCad — why?

KiCad switched its project format to JSON (.kicad_pro) at version 6. Opening the legacy .pro in KiCad 6 or later migrates the project automatically. Keep a copy of the original before upgrading in case you need to open it in the old version again.

References