2011-11-29 72 views
29

我试图建立一个测试项目看起来像我自己的项目只是为了把事情先工作,它看起来像这样:CMake的与包括和源文件路径 - 基本设置

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

我发现一些教程,但我无法找到如何设置这个时,我有公司和src文件夹? CMakeLists.txt文件将如何显示?我会在每个项目文件夹中有一个吗?这似乎我不需要在inc和src文件夹中有一个?

回答

59

对于每个源子目录,您需要一个CMakeLists.txt。您的结构应该是这个样子:

内容的 root/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 

内容 LibProject/CMakeLists.txtMainProject/CMakeLists.txt
project(MyProject) 
subdirs(MainProject LibProject) 

内容的 LibProject/src/CMakeLists.txt
subdirs(src) 

# 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 
+8

重点不是复制你的答案,而是完成它。据我所知,没有两个缺少的'CMakeLists.txt'和缺少'link_directories()'命令是行不通的。我有意为你的答案发表评论,但我的名声太低,无法做到。所以我想发布第二个答案将是最自我包含的方式。并不意味冒犯你。 –

+0

它必须在没有link_directories的情况下工作,因为它是由同一个项目构建的库。至于路径问题你是对的,我会纠正它。 – Beginner

+0

Aah cool ok ..谢谢 – bitgregor

18

你可以像下面这样做。

  • 在MainProject目录

    的CMakeLists.txt:

    project(MainProject) 
    
    add_subdirectory(LibProject/src) 
    add_subdirectory(MainProject/src) 
    
  • 在LibProject/src目录

    的CMakeLists.txt:

    include_directories(${PROJECT_SRC_DIR}/LibProject/inc/) 
    add_library(LibProject test.cpp) 
    
  • 的CMakeLists.txt在MainProject/src目录:

    include_directories(${PROJECT_SRC_DIR}/MainProject/inc/) 
    add_executable(MainProject main.cpp) 
    target_link_libraries(MainProject LibProject) 
    
+3

请问你为什么有'$ {PROJECT_SRC_DIR}'?我得到了一个CMake错误,必须按照如下所示更正该变量:'$ {PROJECT_SOURCE_DIR}'根据文档使其工作 – nakajuice

+1

,它应该是PROJECT_SOURCE_DIR。你可以在这里找到详细信息:https://cmake.org/Wiki/CMake_Useful_Variables – wasabi