Hello,
I am setting a library project for Visual Studio (questions at the end of post) :
└── MyLib
├── CMakeLists.txt
├── include
│ └── MyLib
│ └── SubLib_1
│ └── x.h
├── src
│ ├── CMakeLists.txt
│ ├── SubLib_1
│ │ └── x.cpp
│ ├── SubLib_2
│ │ ├── y.h
│ │ └── y.cpp
│ └── SubLib_3
│ ├── y.h
│ └── y.cpp
└── test
├── CMakeLists.txt
└── testcase.cpp
MyLib\CMakeLists.txt :
cmake_minimum_required(VERSION 3.17.3)
project(MyLib LANGUAGES CXX)
add_subdirectory(src)
add_subdirectory(test)
MyLib\src\CMakeLists.txt :
target_include_directories(MyLib
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR} )
target_sources(MyLib
PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/MyLib/SubLib_1/x.h>
SubLib_1/x.cpp
SubLib_2/y.h
SubLib_2/y.cpp
SubLib_3/z.h
SubLib_3/z.cpp)
source_group(TREE . PREFIX Sources)
When I run the generator Visual Studio 2017, I get a solution called MyLib, where I can found 4 projects :
- ALL_BUILD
- MyLib
- MyLibTest
- ZERO_CHECK
In the project MyLib, I have :
- References
- External Dependencies
- Header Files
- Source Files
In Header Files, I have :
y.h
z.h
In Source Files, I have :
x.cpp
y.cpp
z.cpp
- Why do the files are grouped (Header Files / Source Files) ? Yet I used the command
source_group
with theTREE
option. - How to keep in VS the sub-libraries directories structure (should I make a CMakeLists in each sublib ?) ?
- How to display the private headers ?