2017-03-01 543 views
2

我的项目是在结构如下:如何分离CMake中的头文件和源文件?

--root: main.cpp CMakeLists.txt 

    --src: function.cpp CMakeLists.txt 

    --include: function.h 

main.cpp中:

#include <iostream> 
#include "function.h" 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    //call module in function.hpp 
    return 0; 
} 

的CMakeLists.txt在根目录下:

project(t1) 
cmake_minimum_required(VERSION 2.8) 
add_subdirectory(src)    
file(GLOB_RECURSE SOURCES 
    include/function.h 
    src/function.cpp)    
add_executable(${PROJECT_NAME} ${SOURCES}) 

的CMakeLists.txt在src目录:

include_directories(${PROJECT_SOURCE_DIR}/include) 

如何在root和src目录下编写CMakelists来实现函数的单独实现?还有更多,如何在主要方面给他们打电话。 CMake not finding proper header/include files in include_directories可能的解决方案。但它仍然不符合我的情况。

+1

'$ {SOURCES}'不应该包含头文件。使用'include_directories'来指定'include'路径。 –

+1

@πάνταῥεῖ你*可以*将头文件放入目标的源文件中。 CMake不会尝试编译它们,但其他工具,例如IDE,可以在列表/树中显示标题,这可能相当不错。 – Biffen

+0

如何在Qt树中显示include/headers正是我所期望的。但我不能完全理解你上面提到的具体操作。也许你可以告诉我如何将操作添加到下面接受的答案中。 – Qinchen

回答

3

根:

project(t1) 
cmake_minimum_required(VERSION 2.8) 
include_directories(include) 
add_subdirectory(src)    

在SRC:

set(TARGET target_name) 
add_executable(${TARGET} main.cpp function.cpp) 
+0

如果main.cpp在src中,您的解决方案可以很好地解决我的问题。但是,如果main.cpp在根目录下呢? – Qinchen

+2

@Qinchen'add_executable($ {TARGET} ../main.cpp function.cpp)'或'$ {CMAKE_SOURCE_DIR}/main.cpp' – fandyushin

+0

谢谢。答案是完美的。 – Qinchen