Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
[SOLVED] How to create a global top-level source directory?
I want to be able to define a fixed top-level source directory for all of my projects in a SUBDIRS project. I found this wiki entry:
I am using Qt 5.4 so I followed the Qt 5 instruction which simply says to create a .qmake.conf file with the following lines:
However, this does not work. When I query the variable in my main .PRO file, I get an empty variable:
Project MESSAGE: TOP_SRC:
Is there any way to do this that actually works?
Maybe a silly question but are you by any chance using:
Not a silly question, but no, I am only echoing it in all caps.
You must respect the casing of your variables, that's why you don't get anything printed
Its only the text literal portion that WAS printed that is caps. The actual variable is the correct case:
Sorry, misunderstood the echo part.
What OS are you running and what does the folder layout of your project look like ?
I am running OSX 10.10.2 and the project layout is as follows:
CONFIG += c++11 ordered
TEMPLATE = subdirs
#DAR@20150203 The subdirs MUST be in the following order for a successful build.
Qt has some strange dependency handling
Each subdir is a static lib subproject, except for the main app itself which resides in tap_new_display_app. What I wanted to do was to define a global variable that is set to the top-level path of the main .PRO file. This way I have a common reference point for all relative paths to include files, depend paths, etc, regardless of any nesting of the subprojects
I added a message output from the .qmake.conf file itself and I never saw ANY output, suggesting that the .qmake.conf file is not being loaded.
I just tried another approach that appears to work. Here is my solution: I created a top_srcdir.pri file at the same level as my main tap_new_display_app.pro file containing the following:
Then I included it in the main .pro file and immediately echoed it:
@Project MESSAGE: TOP_SRCDIR: /Users/droscoe/Documents/workspace/dar_tap_display_20150209_view/aop/external/tap_new_display@
If I include the top_srcdir.pri file in another project, it appears to work as well:
Project MESSAGE: MAIN - TOP_SRCDIR: /Users/droscoe/Documents/workspace/dar_tap_display_20150209_view/aop/external/tap_new_display
Project MESSAGE: AOP_DATA - TOP_SRCDIR: /Users/droscoe/Documents/workspace/dar_tap_display_20150209_view/aop/external/tap_new_display
I guess the $$PWD is being expanded to the path in which it resides, not from the directory its being included from, so as long as its at the top-level of my source tree, I have a workable solution. The method in the WIKI does not work and should be removed
I just retested it and it's working with the .qmake.conf file in the root directory. Again a silly question but did put the point before qmake.conf ?
Yes, I did. I've recreated the experiment 3 times with the same result. I get no indication .qmake.conf is being read. I've confirmed this on Mac an Windows. Is there something I should be doing other than creating the .qmake.conf file?
Vyacheslav last edited by
I can confirm on Qt-5.4 Linux 64bit that the solution in original article doesn't work.
DRoscoe last edited by DRoscoe
@Vyacheslav I was able to get around this problem by defining a file at the root level of my project. I named it "top_srcdir.pri" and it contains the following lines:
#------------------------------------------- # Filename : top_srcdir.pri # Description: Describes the top-level source path and common library include paths #------------------------------------------- aop_srcdir=$$PWD/../../../aop cto4_srcdir=$$PWD/../../../CTO4Shared
Then I simply include that file everywhere I need to reference a fixed location for my top-level source tree. Works like a charm
Vyacheslav last edited by
Tnx @DRoscoe . I saw your solution above. Just thought it's worth mentioning that the problem is still there ;)