Code::Blocks Forums
User forums => Using Code::Blocks => Topic started by: andycc57 on November 29, 2013, 03:31:28 am
-
I'm on Linux with C::B version 10.05.
After adding any file, the "compile file" and "link file" flags are set to true (ticked). Only my main.cpp should get built - it has #include statements that pull in all other files recursively. All library include lines (such as "#include <vector>" and "#include <iostream>") are at the top of main.cpp and nowhere else - the compiler fails due to this, since it wrongly tries to build bus.cpp first (alphabetical). Vector is not defined, cout is not defined, etc. The compiler only needs to build main.cpp.
In the project file manager I can right click on each individual file, select properties, go to the Build tab, uncheck "compile file" and "link file". That works. I have some projects though with up to 100 source files - that is going to take too long.
How can I change which files get built? When adding, the only option is telling C::B which targets the file should belong to. If I select no targets, it just asks again until I pick one or more. Surely I'm missing something here.
-
Upgrade to the newer version of codeblocks... 10.05 is a very, very, old version of codeblocks... I would recommend a nightly build myself.
But you can find a priority weight slider in the new versions in that same build menu. This allows you to specify the build order of individual files.
-
I'm not sure if I understand correctly:
Do you include the other cpp-files in main.cpp with the #include-statement ?
-
I'm on Linux with C::B version 10.05.
After adding any file, the "compile file" and "link file" flags are set to true (ticked). Only my main.cpp should get built - it has #include statements that pull in all other files recursively. All library include lines (such as "#include <vector>" and "#include <iostream>") are at the top of main.cpp and nowhere else - the compiler fails due to this, since it wrongly tries to build bus.cpp first (alphabetical). Vector is not defined, cout is not defined, etc. The compiler only needs to build main.cpp.
In the project file manager I can right click on each individual file, select properties, go to the Build tab, uncheck "compile file" and "link file". That works. I have some projects though with up to 100 source files - that is going to take too long.
How can I change which files get built? When adding, the only option is telling C::B which targets the file should belong to. If I select no targets, it just asks again until I pick one or more. Surely I'm missing something here.
If I understood correctly, you have a project which includes 100 files more or less, but you want to build one file at a time so you may see the actual output of each file? Am I correct?
If that is the case, well I don't know of any different way other than remove the files from project, (which does not delete them from project directory, just to let you know to have no worries) and include each file one-by-one and compile it upon request.
Now, about your building issue with header files, I would suggest to follow the well-known concept Declaration / Implementation / Use; that is, in your Declaration [header] file(s), declare your structures / classes, function prototypes, and include the necessary header files which implementation files will going to use. Then, in your implementation file call your own header file that includes the aforementioned information, and in your use file, that is your main.cpp, you may include your header file to generate the desire linkage so it can produce the executable.
I hope it make sense to you.
Cheers.
P.S.: If you need me to produce a tiny demo for you, please by all means, do not hesitate to ask me so I can gladly create it for you.
-
You can write a script to disable them all at once.
See here: http://wiki.codeblocks.org/index.php?title=Scripting_commands#ProjectFile
-
How can I change which files get built?
By not including everything in main.cpp. Instead use correct C++ programming, including header files in cpp files that need them. That way C::B will compile only changed files.
-
By not including everything in main.cpp. Instead use correct C++ programming, including header files in cpp files that need them. That way C::B will compile only changed files.
Your comment is not constructive!
The OP might have his reasons to do what he is trying to do.
For example I know that SQLite people has a mode for building in this way and they gain some performance from it
(because the compiler can see all the function and do its magic).
-
For example I know that SQLite people has a mode for building in this way and they gain some performance from it (because the compiler can see all the function and do its magic).
Please explain more about this magic. How doesn't compiler "see" all functions in any cases?
-
For example I know that SQLite people has a mode for building in this way and they gain some performance from it (because the compiler can see all the function and do its magic).
Please explain more about this magic. How doesn't compiler "see" all functions in any cases?
Likely code optimization is made easier by seeing all the code at once.
But, the main reason I think SQLite uses a single effective c/c++ file is ease of use is improved for some cases.
Tim S.
-
Please explain more about this magic. How doesn't compiler "see" all functions in any cases?
The compiler can optimize better, because it sees all functions and code, so it can do better inlining, const propagation, etc. You get the same benefits like with the newer -flto flag.
-
Not sure if I understand this correctly, but when you add an entire hierarchy of files, you're being asked what targets, if any, to add the files to (I've not done this for a long time, but used to be like that).
If you don't want them compiled, just don't add them to a target.
-
The compiler can optimize better, because it sees all functions and code, so it can do better inlining, const propagation, etc.
But how the compiler can optimize anything if there are more than one module? I know from my experience that GCC's -O2 does speed up the program even I'm using one header+cpp file per class -style.
-
Of course it will speed up the program, it is an optimizing compiler after all. :)