using Find*.cmake without adding it to cmake modules folder - cmake

I want to use FindAntTweakBar.cmake that it becomes able to find the anttweakbar, but I dont have administration access to the cmake's modules folder, so I cannot copy it there. Is there any way to include it and not copy it in the Modules folder? I am using the cmake-gui in the windows.

You can add it to a folder of your choice within your project instead, and modify the CMAKE_MODULES_PATH for that specific project in your CMakeLists.txt.
For instance, if you were to put it into a folder "[location of top-level CMakeLists.txt]/cmake", you would issue:
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake")

Related

VSCode esp-idf wont link my component folder to project

I'm trying to create new a folder, where I will keep my components, I already have default components folder (components), but I want to use two or more folders to keep my files sorted. I tried creating new folder (managed_components), adding files but my main file can't find new components folder
I have read, that I need to update my CMakeLists.txt file by adding EXTRA_COMPONENT_DIRS command, but I don't know how it works and can't find any information how to use it, what exactly should I do to tell my main.c file, that there are other component folders in this project and how to link them?
First of all, managed_components directory is used by the IDF Component Manager, so you should come up with a different name.
Secondly, consider if you really need multiple component directories. Do you know that you can have subdirectory for each component inside components directory? For example:
cd components/
idf.py create-component new_component
Finally, if you do want to add extra component directories, then edit the CMakeLists.txt file in the root of your project and add a line like so:
set(EXTRA_COMPONENT_DIRS my_extra_components)
See this example CMakeLists.txt.

Can CLion project files be stored in a specified folder by default?

I've been using CLion for a little while now, and I quite like it, except that it stores it's prject files by default in my CMake project. I am wondering if I can set a default place it stores it's project files(like compiled executables) in specific directory, per project.(So not one big folder that might interfere with other projects). The reason I want to do that is because I don't like having it in my git project(yes, I know about .gitignore) Anyone know how to do that?
Thanks!
To use a different folder for CLion building
In the CLion menu:
Build,Execution,Deployment -> Cmake -> Generation Path
Change the value to the folder path you want.
To include source code from a different folder out of current
In your CMakeLists.txt, add subdirectory like following:
add_subdirectory(<PATH_OF_YOUR_ANOTHER_CMAKE_PROJECT>)
Be aware PATH_OF_YOUR_ANOTHER_CMAKE_PROJECT can be anywhere on your computer, which does not have to be in your current project folder or one of the sub-folders.

Configure CMake to show include directory in QT Creator

I'm trying to figure out how SFML's CMake configuration shows the <SFML/*> include directory in a project folder.
My test project has include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) but the include folder does not appear in the project structure like SFML's
The folder will show up if you have added any source files from within that directory (or a subdirectory below it) to any target in the project. Since you are talking about headers, you can simply add the header files as sources to an existing target. CMake will just ignore them as far as the building of that target is concerned, but it will then add those headers to the project's list of files. I've also seen people add a static library target with nothing but headers listed just so those headers show up in the project view. A bit hacky in my opinion, but it gets the job done.

Why organize projects inside a src folder?

First of all, I would like to make it clear that I know that the src folder is not required. Indeed, one can simply create manually one directory for the project, make one valid project.json and one Startup class and everything should work fine even without Visual Studio.
My point is the following: when we create a new project using ASP.NET 5 from Visual Studio 2015 it creates a solution and inside the solution's folder it creates one src folder. Within this folder all projects are created.
Now why would anyone want to make one src folder inside the solution folder? Why not putting the projects direct onto the solution folder? Is there any advange on the organization of the project to put the projects inside a src folder? Why VS does that now?
You usually have more files inside your project that are not source code related like:
README.md
CONTRIBUTING.md
.gitignore
LICENSE
Build scripts
Docs and tools folders, etc.
And a tons of others files that depend on your configuration. So, if you have a src folder, you don't need to mix your source code files with those.
because you may have your code in src folder (class libraries, etc), test in your test folder, documentation in a documetation folder
in global.json you specify which folders does roslyn pick for compiling.

CMAKE for a build a simple framework

I have my mind crashing with cmake. After this answer I have tried to make a simple example and put it in github because there are a lot of file inside directories and could be boring copy everything here.
What I'd like to do is to build a simple frameworks for handling my qt/opencv/opengl experiments. What I like to have is a repository with those directories:
root*
|-apps
|---test1*
|
|-build
|-cmake*
|
|-modules
|---foo*
(The * signed directory are the ones with some cmake files like CmakeLists.txt or FindXXModule.cmake)
In modules i can write the modules (for example a module for face recognition, a module for draw a red cube in opengl, a module that contains my personal qt widget extension).
Than I need an easy way for create an application and link some modules on it. For that I thought to create a cmake directory where to put the FindXXModule.cmake and in the apps just say: find_package(XXModule).
Note that for now I don't care about installing this repository and the tree structure must be this one (so if I am in a apps/test2 I know I can refer to the cmake directory as ../../cmake or the module directory is ../../modules)
I have wrote a little example with the app named test1 that uses the module foo and i put it in a github repository.
For now I can compile the application test1 with cmake calling cmake path_to_test1_CmakeLists.txt and I am happy about that. But if I try to launch cmake path_to_root_CmakeLists.txt it does not work because the file Findfoo.cmake is read two time (and i did't be able to use some if for not reading it twice).
Then, if i run the test1 cmake a foo directory with cmake cache etc are created in root/cmake and I don't want it. I want all file cmake has to generate are in root/build directory.
So, those are my 2 question:
How create a CmakeLists.txt that can build all the apps and all the future test i will write in the modules directory
How avoid that launching cmake of a single app will create files in the cmake directory.
Sorry if my english and my idea of how cmake works are not good.. i hope it is clear.
EDIT:
One more thing. In Findfoo.cmake I have a bad hack: for adding the real CMakeLists.txt inside a modules/foo when I call the cmake from test1 I have to add a subdirectory that is not in the tree.. Maybe this kind of hack could be deleted reviewing the enteire structure..
As you say you want to put the whole directory structure into source control. This means these folder structure is same on every location where you do a checkout. So why creating the Findfoo.cmake if you have a relative path the the foo directory?
I suggest to put a CMakelists.txt file in to root that adds all subdirectories. To reduce confusion between files generated by CMake and original files, you should create a folder called ./build (or even ../build) and run CMake in that directory with the root directory as first argument. This creates all CMake generated files in the ./build directory and gives you the possibility to clean it up easily. This way of working is called out-of-source build and its highly recommended to use cmake in this way. See this question for an example.