CMake solution sub-directory

2019-06-10 06:24发布

I have a big CMake solution which contain 5 projects. On this 1 project creates Main executable and rest of the 4(3 static + 1 dynamic) projects creates libraries which are linked to the main project.

MainSolution:
 |-MainExecutablePrj
 |-StaticLib_1Prj
 |-StaticLib_2Prj
 |-StaticLib_3Prj
 |-DynamicLib_1Prj

The entire project is to be build for both windows and linux platforms. Now I need to create an Sub directory under MainSolution and create some testcase projects which uses the DynamicLib_1 (.lib/.so). So far what I have done is I will have different solution for each test cases and copy the required .h files and .lib(.so) files and build the test case solutions.

Its very hard for me to maintain the source code and whenever there is an change on the dynamic library I need to copy all the necessary files and rebuild the test cases again. So I wanted to include the Test cases solutions inside my main project, so that whenever I change dynamic library project it builds the test case projects as well.

I very well know to add those test case solutions as projects under the MainSolution but I wanted to create sub-directory and put all the test case projects under that folder.

MainSolution:
 |-TestCasesFolder
   |-TestCase_1Prj
   |-TestCase_2Prj
   |-...
 |-MainExecutablePrj 
 |-StaticLib_1Prj
 |-StaticLib_2Prj
 |-StaticLib_3Prj
 |-DynamicLib_1Prj

Can someone help me on this

标签: c++ cmake
1条回答
再贱就再见
2楼-- · 2019-06-10 06:48

It should not be necessary to copy any files.

  • Let CMake find the built libraries with find_library and add a hint to the path of subdirectories build folder
  • Let CMake include the header files from your subproject with include_directories. Add a prefix to make it platform independent.

Regarding the tests: All unit tests for a subproject should be places within the structure of this project and not in the root project. Place all integration tests in the root project or a separate test project as part of the root project.

Example Structure

查看更多
登录 后发表回答