具有包含和源路径的 CMake-基本设置

我试图建立一个测试项目,看起来像我自己的项目只是为了让事情工作第一,它看起来像这样:

/MainProject/inc/main.h
/MainProject/src/main.cpp
/LibProject/inc/test.h
/LibProject/src/test.cpp

我已经找到了一些教程,但我不能找到如何设置这当我有公司和 src 文件夹?CMakeLists.txt 文件看起来如何?我是否应该在/中,在每个项目文件夹中都有一个?似乎我不需要有一个在公司和 src 文件夹?

132205 次浏览

你可以这样做。

  • MainProject 目录中的 CMakeLists.txt:

    project(MainProject)
    
    
    add_subdirectory(LibProject/src)
    add_subdirectory(MainProject/src)
    
  • CMakeLists.txt in your LibProject/src directory:

    include_directories(${PROJECT_SOURCE_DIR}/LibProject/inc/)
    add_library(LibProject test.cpp)
    
  • CMakeLists.txt in your MainProject/src directory:

    include_directories(${PROJECT_SOURCE_DIR}/MainProject/inc/)
    add_executable(MainProject main.cpp)
    target_link_libraries(MainProject LibProject)
    

每个源子目录都需要一个 CMakeLists.txt:

root
|-MainProject
| |-inc
| | '-main.h
| |-src
| | |-main.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt
|-LibProject
| |-inc
| | '-test.h
| |-src
| | |-test.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt
'-CMakeLists.txt

root/CMakeLists.txt内容:

project(MyProject)
add_subdirectory(MainProject)
add_subdirectory(LibProject)

LibProject/CMakeLists.txtMainProject/CMakeLists.txt的内容:

add_subdirectory(src)

LibProject/src/CMakeLists.txt内容:

# Notice name prefix of this variable, set by CMake according
# to value given with "project()" in the root CMakeLists.txt.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
add_library(LibProject test.cpp)

MainProject/src/CMakeLists.txt内容:

include_directories(${MyProject_SOURCE_DIR}/MainProject/inc)
# I assume you want to use LibProject as a library in MainProject.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
link_directories(${MyProject_SOURCE_DIR}/LibProject/src)
add_executable(MainProject main.cpp)
target_link_libraries(MainProject LibProject)

然后配置和构建:

$ cd root
$ mkdir build
$ cd build
$ cmake ..
$ make

对我来说,我想用 单个 CMakeList来做。这对我很管用。我添加我的解决方案,以防它服务于任何人。

我就是这么做的:

My structure:
Project
|CMakeLists.txt
|-src
| |*.cpp
| |*.c
|-include
| |*.hpp
| |*.h

我的 CMakeLists.txt 必须包含以下主要部分:

include_directories(
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
)

^ 启用. cpp 文件在 include 文件夹中添加头文件。

file(GLOB all_SRCS
"${PROJECT_SOURCE_DIR}/include/*.h"
"${PROJECT_SOURCE_DIR}/include/*.hpp"
"${PROJECT_SOURCE_DIR}/src/*.cpp"
"${PROJECT_SOURCE_DIR}/src/*.c"
)

^ 只要添加这些文件夹中的任何内容。

add_executable(MyTarget ${all_SRCS})

^ 从所有源的列表中构建目标

PS: 如果您想看到完整的 CMakeLists.txt,请访问项目链接 NEGU93/紫禁沙漠