April 5, 2018 at 13:32 #20619
I was trying to follow the tutorial “Creating Linux Libraries with Visual Studio” on https://visualgdb.com/tutorials/linux/libraries/
Unlike in the tutorial, my project (not the lib) is a Qt project (“Use Qt”) and not an MS project (“Use MSBuild”), as in the tutorial.
The lib was created as an MS project, as demonstrated in the tutorial.
The problem is that when I try to add my lib reference to my Qt project I get an error message: “A reference to ‘libxx’ cannot be added
because the two projects target different platforms.”
Nahum Budin.April 5, 2018 at 16:50 #20620
And one more piece of information, if applicable, Linux machine = Raspberry Pi.
Nahum Budin.April 6, 2018 at 00:42 #20627
Sorry, combining Qt-based projects with MSBuild-based libraries is not supported directly, but there are a few workarounds.
The recommended approach would be to switch your Qt project to use MSBuild as described in this tutorial. It involves a few extra steps, but will give fine-grain control over various build settings, will result in faster builds and will allow compiling individual files to quickly check for errors.
Another option would be to create a Qt application project and manually edit the .pro file to turn it into a library project as described here and then edit the .pro file of the main project to link with the output of the library project. Let us know if you need further help with this.April 7, 2018 at 14:16 #20642
Thanks for the prompt reply.
I was trying to implement the 1st solution but after adding the Target Section XML lines from the tutorial to the .props file (the 2 GenericGNUtool sections),
the project loading by VS failed.
(I could not use the full file in the example, as it is using Qt5 while I’m using Qt4 (and its a long story why I haven’t been able switching to Qt5).
So I tried the second approach.
It works, but raised a new issue.
In my case, I would like to build a static library that in addition to my code, links to other static libraries (e.g. Bluetooth), so it will be easier
to use my (integrated) library that wraps the other libraries services with a higher level API.
Is there a way to do it (I know that VS has the lib tool)?
Nahum Budin.April 7, 2018 at 21:44 #20643
So I have walked through the .props file (for the 1st approach) again, only to find out 2 fault spaces on the long lines :-(.
Once removed, solution is now loaded and build successfully using MS build.
However, every time I load the solution I get the following error message: “The selected toolchain is missing the MSBuild rule files. Do you want to regenerate them?”
I select “Yes”, I get a dialog running Preparing Toolchain for MSBuils…. , but next time I load the solution I still get the error message.
And please also do not forget my question regarding linking a static library to another static library.
Nahum Budin.April 9, 2018 at 04:21 #20648
Please try installing VisualGDB 5.4 Preview 2 – it resolves several cases of the spurious “regenerate MSBuild rules” message.
Regarding the static libraries, if you are using MSBuild, you can use the “Exported Settings” page of VS Project Properties – simply add your additional library names to the “exported library names” field and VisualGDB will automatically add them to the final executable you are linking.
If you are using QMake, this might require writing custom build rules. You can try the suggestions described on this page, however using MSBuild should be generally easier as we have designed the “exported settings” mechanism specifically for this case.April 9, 2018 at 19:44 #20652
Once again thanks for the prompt and helpful reply. The MSBuild option, as suggested works fine.
I would like now to use the cross compilation option and let my quad-core i7 do the hard work and not the Raspberry Pi using the build over the network option, as demonstrated in the tutorials presented so far.
What should be changed in the processes of converting the Qt project (other than the commands paths) into MSBuild and creating the library?
My next issue is, is there a way to set IntelliSence to recognize the library context (other than manually adding the .h files)?
Nahum Budin.April 9, 2018 at 20:02 #20653
Please also note the following build messages
2>C:\Program Files (x86)\Sysprogs\VisualGDB\MSBuild\SysprogsPlatform.targets(38,3): warning MSB4011: “C:\Users\Nahum\AppData\Local\VisualGDB\FindComponents.props” cannot be imported again. It was already imported at “E:\Nahum\Workspace\RaspberryPi3\Projects\VS\AdjHeartRapiSynth1.0\AdjHeartRapiSynth1.0\AdjHeartRapiSynth1.0.vcxproj (48,5)”. This is most likely a build authoring error. This subsequent import will be ignored.
2>C:\Program Files (x86)\Sysprogs\VisualGDB\MSBuild\SysprogsPlatform.targets(73,2): warning : Missing toolchain profile for 192.168.3.2, ID=’com.sysprogs.toolchain.default-gcc’, version=”. IntelliSense may produce incorrect results.
Nahum.April 10, 2018 at 02:57 #20660
Sorry, just editing the .vcxproj file to switch to cross-compilation won’t be sufficient. Instead, please do the following:
- Create a new cross-compiled Qt project using the QMake project subsystem. This will get all Qt-related tools in sync and ensure they work. Ensure the project builds and starts properly.
- Create a new cross-compiled MSBuild project. This will get the toolchain profiles and other settings to work (it will also setup IntelliSense).
- Finally apply the same custom rules to the newly created MSBuild project. This will add support for invoking uic/moc so you can build your project fully automatically.
Let us know if you run into any problems and we will help.April 10, 2018 at 20:10 #20665
Thank you for the reply.
Sorry, but I don’t understand what do you mean by: “Finally apply the same custom rules to the newly created MSBuild project”
Can you please provide me with more detailed instructions/tutorial/demo?
April 11, 2018 at 00:34 #20670
- This reply was modified 1 week, 5 days ago by nahumb.
Sorry, we don’t have a specific tutorial for using Qt with MSBuild and a cross-compiler, although the steps will be very similar – obtaining a build log file and creating GenericGNUTool rules just like you did for the directly compiled project.
If you are not comfortable modifying the .vcxproj file, please try using Raspberry Pi 3 for compilation – its 4-core CPU is fairly fast.April 11, 2018 at 09:04 #20677
Can you please guide me to the .props dirs/files used by VGDB to build the remote/cross Qt/MSBuild versions?
Nahum.April 11, 2018 at 17:47 #20681
No problem. All MSBuild-specific rules are located in the <VisualGDB directory>\MSBuild folder, although we generally don’t recommend patching them as updating VisualGDB will override your changes. Instead you can add custom rules files inside your source checkout and reference those additional files from your projects, combining VisualGDB rules with your custom rules.April 12, 2018 at 08:33 #20689
Yes, indeed not recommended (nor fun)…..
Any chance you will provide it in the near future?
Nahum.April 13, 2018 at 01:10 #20692
Sorry, as the steps are very similar, we don’t have any short-term plans for publishing another tutorial. That said, if you encounter any specific issues while trying to apply the steps from the current tutorial, feel free to post the details here and we will help you resolve them.
You must be logged in to reply to this topic.