How to Build Subdirectory CMake Project GLFW and Change Targets

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to Build Subdirectory CMake Project GLFW and Change Targets

junk email
Hello,

I am trying to understand how to build a subdirectory project that has its own CMakeLists.txt file already setup. In this case, I am using the open source library GLFW to help me with some of my OpenGL applications. Here is a sample directory structure I am working with.

Root
├── CMakeLists.txt
├── MainProject
├── build
└── glfw-3.3

The folder MainProject is where I will be doing all my own development and has a src, include, and lib folder associated with it. The glfw-3.3 directory was downloaded from online and has its own CMakeLists.txt file as mentioned previously. So if I were to build my project from the current build directory shown here, how should I add the glfw library to it and also change its target outputs?

Answers online suggest using ExternalProject_Add(), while others say to simply add_subdirectory() and then change some of the properties. I want to be able to have a user run the root CMake file and have the targets be correctly placed (since users might be on different operating systems). Either way I have not been able to find an explicit example, perhaps my Googling skills for CMake are lacking, and any help on this would be appreciated. Thank you for your time.

Best,
mlg


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: How to Build Subdirectory CMake Project GLFW and Change Targets

frodak17


On Fri, May 17, 2019 at 2:55 AM junk email <[hidden email]> wrote:
Hello,

I am trying to understand how to build a subdirectory project that has its own CMakeLists.txt file already setup. In this case, I am using the open source library GLFW to help me with some of my OpenGL applications. Here is a sample directory structure I am working with.

Root
├── CMakeLists.txt
├── MainProject
├── build
└── glfw-3.3

The folder MainProject is where I will be doing all my own development and has a src, include, and lib folder associated with it. The glfw-3.3 directory was downloaded from online and has its own CMakeLists.txt file as mentioned previously. So if I were to build my project from the current build directory shown here, how should I add the glfw library to it and also change its target outputs?

Answers online suggest using ExternalProject_Add(), while others say to simply add_subdirectory() and then change some of the properties. I want to be able to have a user run the root CMake file and have the targets be correctly placed (since users might be on different operating systems). Either way I have not been able to find an explicit example, perhaps my Googling skills for CMake are lacking, and any help on this would be appreciated. Thank you for your time.

Best,
mlg



If Root/CMakeLists.txt is the root of the source directory it's pretty simple.  Just use add_subdirectory() as usual.

Again I don't follow why GLFW targets would have to change.  It builds in the Build directory like everything else.  In this case it would be Root/build/glfw-3.3 (assuming Root/build is what was supplied on the command line as something like "cmake -S Root -B Root/build").

For me I downloaded GLFW and put it outside my source tree.  Then I just used a relative path to it's location.  Because it is outside the source tree I had to specify the build directory to use.

But GLFW looked to be pretty simple and there wasn't any changes to its CMakeLists.txt file.  I just set some of the options to blank so that they wouldn't be built.

This is from the CMakeLists.txt for my directory structure:
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
add_subdirectory(../glfw-3.2.1 glfw)
...
target_link_libraries(application glfw)

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake