使用cmake为每个可执行文件配置include目录

时间:2011-12-21 02:48:42

标签: cmake

我用cmake开始了一个项目,由两个可执行文件组成。 两个可执行文件使用了很多代码。

现在,我需要为每个可执行文件配置不同的包含目录。 如果我使用include_directories,它会为所有可执行文件添加我的目录。

可以为可执行文件独立配置包含目录吗?

这是我的目录:

.
├── CMakeCache.txt
├── CMakeFiles
│   [...]
├── cmake_install.cmake
├── CMakeLists.txt
├── includes
│   ├── client
│   │   └── main.hpp
│   ├── server
│   │   └── main.hpp
│   └── shared
├── Makefile
└── sources
    ├── client
    │   ├── main.cpp
    ├── shared
    │   ├── lib.cpp
    └── server
        └── main.cpp

2 个答案:

答案 0 :(得分:5)

您应该为他们的目标(sources\client\CMakeLists.txtsources\server\CMakeLists.txt)中的两个可执行文件创建CMakeLists.txt。在那里你可以include_directories(),这不会干扰其他目标。

不要忘记在根CMakeLists.txt中执行add_subdirectory()

答案 1 :(得分:0)

关于add_subdirectory是否有意义,这取决于您的项目和目录布局。它擅长拆分可分离的项目部分,并用简单的例子说明策略是合理的。

另一种处理方法是使用target_include_directories指定每个目标包含。对于您的示例,您的CMakeLists.txt将如下所示:

project(client_server)    

include_directories(
  includes
  includes/shared)

add_library(client_server_lib sources/lib.cpp)

add_executable(server sources/server/main.cpp)
target_include_directories(server PUBLIC
  includes/server
)
target_link_libraries(server client_server_lib)

add_executable(client sources/client/main.cpp)
target_include_directories(client PUBLIC
  includes/client
)
target_link_libraries(client client_server_lib)

https://cmake.org/cmake/help/v3.0/command/target_include_directories.html

的其他信息