Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake and Visual Studio - Specify solution file directory

I've defined a CMakeLists.txt file for my project which works correctly.

I use the CMake GUI for generating a Visual Studio Project, and I ask to build the binaries (CMAke cache and other stuff) in the folder Build which is in the same folder where CMakeLists.txt is.

I was able to specify where the executable and the libraries have to be created. Is there a way to specify also where the Visual Studio Solution file has to be created? I would like to have it in the root directory, but at the same time I don't want to have also all the other files that CMake creates in the Build directory.

CMake creates the Project I defined in CMakeLists.txt but also two other projects: ALL_BUILD and ZERO_CHECK. What's their utility? I was able to avoid the creation of ZERO_CHECK by using the command set_property(GLOBAL PROPERTY USE_FOLDERS On). Is there a way for avoiding also the creation of ALL_BUILD?

like image 388
Maverik Avatar asked Nov 08 '13 18:11

Maverik


People also ask

How to get started with CMake in Visual Studio?

Getting started with CMake in Visual Studio. To start, create a simple CMakeLists.txt file in the same folder with your cpp file as in the example below. Then, open the folder in Visual Studio (via File > Open > Folder… or devenv.exe <foldername>). Alternatively, open a folder inside VS containing one of your existing CMake projects.

Can I see the structure of a CMake project in Solution Explorer?

This is especially true if your project includes files outside of the folder or if it conditionally includes files depending on the active configuration. The newly added Targets View allows you to visualize the structure of a CMake project in the Solution Explorer.

How do I use the CMake settings editor?

In Visual Studio 2019, the CMake Settings Editor provides a convenient way to edit your settings. For more information, see Customize CMake settings. One setting, intelliSenseMode isn't passed to CMake, but is used only by Visual Studio. Use the CMakeLists.txt file in each project folder just as you would in any CMake project.

What is C++ CMake tools for Windows component?

The C++ CMake tools for Windows component uses the Open Folder feature to consume CMake project files (such as CMakeLists.txt) directly for the purposes of IntelliSense and browsing. Both Ninja and Visual Studio generators are supported.


1 Answers

It seems you only switched to CMake very recently, as exactly those questions also popped into my head when I first started using CMake. Let's address them in the order you posted them:

I use the CMake GUI for generating a Visual Studio Project, and I ask to build the binaries (CMAke cache and other stuff) in the folder Build which is in the same folder where CMakeLists.txt is.

Don't. Always do an out-of-source build with CMake. I know, it feels weird when you do it the first time, but trust me: Once you get used to it, you'll never want to go back.

The single fact that using source control becomes so much more convenient when code and build files are properly separated make this a killer-feature of CMake.

Is there a way to specify also where the Visual Studio Solution file has to be created?

You really shouldn't care.

I see why you do feel that you need full control over how the solution and project files get created, but you really don't. Simply specify the target for the solution as the origin of your out-of-source build and forget about all the other files that are generated. You don't need to worry, and you don't want to worry - this is exactly the kind of stuff that CMake is supposed to take care of for you.

Ask yourself: What would you gain if you could handpick the location of every project file? Nothing, because chances are, you will never touch them anyways. CMake is your sole master now...

CMake creates the Project I defined in CMakeLists.txt but also two other projects: ALL_BUILD and ZERO_CHECK. What's their utility? I was able to avoid the creation of ZERO_CHECK by using the command set_property(GLOBAL PROPERTY USE_FOLDERS On). Is there a way for avoiding also the creation of ALL_BUILD?

Again, you really shouldn't care. CMake defines a couple of dummy projects which are very useful for certain internal voodoo that you don't want to worry about. They look weird at first, but you'll get used to their sight faster than you think. Just don't try to throw them out, as it won't work properly. If their sight really annoys you that much, consider moving them to a folder inside the solution so that you don't have to look at them all the time.

Bottom line: CMake feels different than a handcrafted VS solution in a couple of ways. This takes some getting used to, but is ultimately a much less painful experience than one might fear.

like image 76
ComicSansMS Avatar answered Oct 11 '22 11:10

ComicSansMS