Help request for hierarchical directory example

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

Help request for hierarchical directory example

David Aldrich-2

Hi

 

I'm learning how to use hierarchical directories in CMake and am trying to get an example to work that I saw on YouTube. The example isn't doing what I expect so I would be grateful for some help in understanding why.

 

I am running CMake 3.10.2 on Ubuntu 18.04 (Microsoft WSL) and using make.

 

I have a project called 'cmake-good' that should build library 'libsay-hello.a' and executable 'cmake-good'.

 

Here's the directory tree (excluding CMake artifacts which I don't think I need to show):

 

├── CMakeLists.txt

├── build

│   ├── CMakeCache.txt

│   ├── CMakeFiles

│   ├── Makefile

│   ├── cmake_install.cmake

│   ├── hello-exe

│   │   ├── Makefile

│   │   ├── cmake-good

│   └── say-hello

│       ├── Makefile

│       └── libsay-hello.a

├── hello-exe

│   ├── CMakeLists.txt

│   └── main.cpp

├── say-hello

    ├── CMakeLists.txt

    └── src

        └── say-hello

            ├── hello.cpp

            └── hello.hpp

 

Here are the CMakeLists.txt files:

 

1) Top level CMakeLists.txt:

 

cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0.0)

add_subdirectory(say-hello)

add_subdirectory(hello-exe)

 

2) hello_exe/CMakeLists.txt:

 

add_executable(cmake-good main.cpp )

target_link_libraries(cmake-good PRIVATE say-hello)

 

3) say-hello/CMakeLists.txt:

 

add_library(

    say-hello

    src/say-hello/hello.hpp

    src/say-hello/hello.cpp

)

target_include_directories(say-hello PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")

 

My problem is that I expect to see:

 

    hello-exe/cmake-good

    say-hello/libsay-hello.a

 

but I see:

 

    build\hello-exe\cmake-good

    build\say-hello\libsay-hello.a  

 

Why is that?


--

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: Help request for hierarchical directory example

Eric Noulard


Le ven. 18 oct. 2019 à 12:53, David Aldrich <[hidden email]> a écrit :

Hi

 

I'm learning how to use hierarchical directories in CMake and am trying to get an example to work that I saw on YouTube. The example isn't doing what I expect so I would be grateful for some help in understanding why.

 

I am running CMake 3.10.2 on Ubuntu 18.04 (Microsoft WSL) and using make.

 

I have a project called 'cmake-good' that should build library 'libsay-hello.a' and executable 'cmake-good'.

 

Here's the directory tree (excluding CMake artifacts which I don't think I need to show):

 

├── CMakeLists.txt

├── build

│   ├── CMakeCache.txt

│   ├── CMakeFiles

│   ├── Makefile

│   ├── cmake_install.cmake

│   ├── hello-exe

│   │   ├── Makefile

│   │   ├── cmake-good

│   └── say-hello

│       ├── Makefile

│       └── libsay-hello.a

├── hello-exe

│   ├── CMakeLists.txt

│   └── main.cpp

├── say-hello

    ├── CMakeLists.txt

    └── src

        └── say-hello

            ├── hello.cpp

            └── hello.hpp

 

Here are the CMakeLists.txt files:

 

1) Top level CMakeLists.txt:

 

cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0.0)

add_subdirectory(say-hello)

add_subdirectory(hello-exe)

 

2) hello_exe/CMakeLists.txt:

 

add_executable(cmake-good main.cpp )

target_link_libraries(cmake-good PRIVATE say-hello)

 

3) say-hello/CMakeLists.txt:

 

add_library(

    say-hello

    src/say-hello/hello.hpp

    src/say-hello/hello.cpp

)

target_include_directories(say-hello PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")

 

My problem is that I expect to see:

 

    hello-exe/cmake-good

    say-hello/libsay-hello.a

 

but I see:

 

    build\hello-exe\cmake-good

    build\say-hello\libsay-hello.a  

 

Why is that?


Because build/ is your build directory and you apparently did an out-of-source build (which is good practice)

You should have done something like:

cd cmake-good/build
cmake ..
make

In this case everything the build is generating (CMake artefact, build artefact etc...) gets written build/
the directory hierarchy in build will have the same structure as your source tree.

This is an expected behaviour.

 

--
Eric

--

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: Help request for hierarchical directory example

David Aldrich-2
Hi Eric

Thanks very much for your answer. I understand now.

David

On Fri, Oct 18, 2019 at 12:57 PM Eric Noulard <[hidden email]> wrote:


Le ven. 18 oct. 2019 à 12:53, David Aldrich <[hidden email]> a écrit :

Hi

 

I'm learning how to use hierarchical directories in CMake and am trying to get an example to work that I saw on YouTube. The example isn't doing what I expect so I would be grateful for some help in understanding why.

 

I am running CMake 3.10.2 on Ubuntu 18.04 (Microsoft WSL) and using make.

 

I have a project called 'cmake-good' that should build library 'libsay-hello.a' and executable 'cmake-good'.

 

Here's the directory tree (excluding CMake artifacts which I don't think I need to show):

 

├── CMakeLists.txt

├── build

│   ├── CMakeCache.txt

│   ├── CMakeFiles

│   ├── Makefile

│   ├── cmake_install.cmake

│   ├── hello-exe

│   │   ├── Makefile

│   │   ├── cmake-good

│   └── say-hello

│       ├── Makefile

│       └── libsay-hello.a

├── hello-exe

│   ├── CMakeLists.txt

│   └── main.cpp

├── say-hello

    ├── CMakeLists.txt

    └── src

        └── say-hello

            ├── hello.cpp

            └── hello.hpp

 

Here are the CMakeLists.txt files:

 

1) Top level CMakeLists.txt:

 

cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0.0)

add_subdirectory(say-hello)

add_subdirectory(hello-exe)

 

2) hello_exe/CMakeLists.txt:

 

add_executable(cmake-good main.cpp )

target_link_libraries(cmake-good PRIVATE say-hello)

 

3) say-hello/CMakeLists.txt:

 

add_library(

    say-hello

    src/say-hello/hello.hpp

    src/say-hello/hello.cpp

)

target_include_directories(say-hello PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")

 

My problem is that I expect to see:

 

    hello-exe/cmake-good

    say-hello/libsay-hello.a

 

but I see:

 

    build\hello-exe\cmake-good

    build\say-hello\libsay-hello.a  

 

Why is that?


Because build/ is your build directory and you apparently did an out-of-source build (which is good practice)

You should have done something like:

cd cmake-good/build
cmake ..
make

In this case everything the build is generating (CMake artefact, build artefact etc...) gets written build/
the directory hierarchy in build will have the same structure as your source tree.

This is an expected behaviour.

 

--
Eric

--

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