对于每个源子目录,您需要一个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.txt
和
MainProject/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
重点不是复制你的答案,而是完成它。据我所知,没有两个缺少的'CMakeLists.txt'和缺少'link_directories()'命令是行不通的。我有意为你的答案发表评论,但我的名声太低,无法做到。所以我想发布第二个答案将是最自我包含的方式。并不意味冒犯你。 –
它必须在没有link_directories的情况下工作,因为它是由同一个项目构建的库。至于路径问题你是对的,我会纠正它。 – Beginner
Aah cool ok ..谢谢 – bitgregor