【发布时间】:2017-03-06 18:10:06
【问题描述】:
我需要帮助才能为 C++ 项目编写一个好的 CMakeLists.txt。
我寻找答案,但我发现了什么。 这是我的项目结构:
MainProj
| ProjLib/
| | include/
| | | proj_lib.h
| | src/
| | | proj_lib.cc
| | CMakeLists.txt
| ProjExec/
| | include/
| | | proj_exec.h
| | src/
| | | proj_exec.cc
| | CMakeLists.txt
| CMakeLists.txt
MainProj CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(MainProj CXX)
# enable C and C++ language
enable_language(C CXX)
# Add sub-directories
add_subdirectory(ProjLib)
add_subdirectory(ProjExec)
ProjLib CMakeLists.txt
set (PROJLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set (PROJLIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(PROJLIB_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/src/proj_lib.cc
)
include_directories("${PROJLIB_SOURCE_DIR}")
include_directories("${PROJLIB_INCLUDE_DIR}")
add_library(ProjLib SHARED ${PROJLIB_SRCS} ${PROJLIB_INCLUDE_DIR})
target_include_directories (ProjLib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
ProjExec CMakeLists.txt
set (PROJEXEC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set (PROJEXEC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(PROJEXEC_SRCS
${PROJEXEC_SOURCE_DIR}/proj_exec.cc
)
include_directories("${PROJEXEC_SOURCE_DIR}")
include_directories("${PROJEXEC_INCLUDE_DIR}")
add_executable(ProjExec ${PROJEXEC_SRCS})
target_link_libraries (ProjExec LINK_PUBLIC ProjLib)
proj_exec.cc
#include "proj_lib.h"
...
并且在 proj_exec.cc 文件中没有找到 proj_lib.h。 如果我在某些 cmake 中需要一些额外的条目?
任何帮助将不胜感激。 :)
【问题讨论】:
-
在
ProjExec/CMakeLists.txt中包含目录ProjExec/src和ProjExec/include。您的库目标带有包含目录(添加有target_include_directories)ProjLib,它被传播到可执行文件。但是这些目录都不等于ProjLib/include标头proj_lib.h所在的位置。那么,您为什么期望找到标头?
标签: c++ cmake multiple-projects