The root is also a project? Or the root is the "project group"?
The root is not a project; it is a container for other projects. In Visual Studio, the root is called a solution. The solution actually is a container for projects and has a few options for choosing run priority.
Ok, now I get slightly confused...
I had a similar conversation with someone else, and they said "In VS you have Solutions in a Workspace" => making it sound like solutions are the project.
But according to
https://learn.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio?view=vs-2022- Solutions:
It's simply a container for one or more related projects, along with build information
Solutions are project groups.
- And projects are also called project.
The difference seems to be that VS has all build/run related stuff in the project group. Lazarus merely offers to trigger the build/run from the group, but has the settings (and tools) in the Project.
However, there also was the mention of Workspaces, and they seem to exist
https://learn.microsoft.com/en-us/visualstudio/extensibility/workspaces?view=vs-2022But there is no info how they relate to solution or project.
Anyway that does not really much matter, except for: If/When we use them in this conversation we need to set out a definition what we mean by them.
So for all purpose, I assume that both "Solution" and "Workspace" shall mean project group. That is, they are
containers for projects. All other functionality follows from that definition.
Then in terms of this discussion (this forum thread here): Our main topic are
- how building multiple projects works?
- Combining the two features (visual or functional)
If there are other issues then please remind me.
About "Combining" .
If that is just putting both windows into a single window => but keep the exact same functionality, then
my opinion is that should be left to docking. There are users who like to have the separate Windows (e.g.: me).
Functional: That may be discussed.
The project group already provides access to many of the project tools and options. If there are one or two others to be added => probably fine. -- Though, depending on what it is, it may need only make sense, if
the IDE can do that without loading the sources of the project into the editors. (As I said, try to access the properties of a project in the group / A project that is NOT the current open project).
Once that is possible, we can see which extra buttons or menu entries to add to project groups. (Well we can before if there are features that don't need to open the project). You already gave a list (rename/ move ...). That is a starting point.
When you click the run button or press F5, all projects are built by VS automatically. Because of project dependencies, there must be a build order that VS considers, but you have not set it by yourself in compile options. If there is a circular reference, VS is not able to compile the projects, and you encounter a "there is a circular reference" compiler error.
Or am I missing a part, and this requests that the project group can automatically run several projects (on some trigger)?
Yes. After the compilation phase, if you need to run more than one project, for example, in a client/server architecture, there are run order options in the solution properties. In other words, you can set which project must run and which one starts first. Also, you can debug all projects Simultaneously.
Ok, unless I missed it (in which case I am sorry) I had no feedback to my latest "build list" comment.
IMHO "building all projects" is a subset of "building a group of specified projects".
And, IMHO "building all" is rarely needed during development. Since we talk about using proper design, I assume testcases, and mock entities are part of the development process. So I would expect that in a project that size, over 90% of all builds are some testcase, wich will only include one or two "live" projects, and "mock" projects for the rest.
So you do need a
place to define "list of projects" that need to be build depending on what you are changing and testing. => That is the aim of the "build lists" idea.
In fact, you may get conflicts if you build mock and live entities at the same time, if they both produce the same binary in the same location. So you definitely need to be able to choose.
But then that order could be different depending on which project you currently have open.
In Visual Studio, when you open a solution, all related projects are opened at the same time. You don't have to select a project as an active project; you can edit all project files freely.
I have worked with Android Studio and Eclipse as well. This is a general mechanism for managing multiple projects. I recommend you install a trial version of VS and try it yourself.
Ok, in Lazarus that probably wont happen. There will always be a project open.
Otherwise we end up having to completely different project management concepts within one IDE => that is a sure concept for chaos.
However,
what we may need is a way to change project, without changing the files that are open in the editors. (aka session).And if we do have that, then changing projects should not be a big issue.
Just to say you can have several projects sharing the same folders and the same units in those folders => that already works....
IMHO it is a mess, and even some VS users told me that they wish there VS work was better organized.... But again, if you do not want structure in your projects => it is possible (already today).
(Sorry that statement is a bit biased by personal emotion...)
However, once you have
- projects that can share a session / can be switched without changing the open editors
- can live in the same folder, sharing the same sources
=> then having the "build lists" on those projects should actually an advantage towards VS having build staff on the group.
You can then without side effects switch projects to indicate if you want to run a testcase, or the real thing, or .....
And then build/run will build exactly that, and with no extra overhead, no time wasted on building something that you do not need to be build.
One point that is not in the above is "sharing build options" across projects.
- How to change all projects between release and test building.
- How to add a define to the test or release settings of all projects.
That still needs to be addressed.
It is separate from "what gets build". This will be "how it will be build".
There may need to be some control of this "how" in the group.
However, at the same time projects need to be able to have control themself. Because some people (like me) currently have groups in which each project needs to have its own settings.
IMHO it should probably end up with each project having an option if it follows the group or not.
Now this are my thoughts....
You may have a different opinion. And if you can show me that it has serious advantages, then please do.
To me, the main point is to
provide the features that you have in VS (or in other words
"allow to do the same things with similar effort").
But not necessarily the same user interface. Not even necessarily the same concepts. (There may be better concepts after all / and we need to integrate our existing concepts without loss or duplication).