我用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
答案 0 :(得分:5)
您应该为他们的目标(sources\client\CMakeLists.txt
和sources\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
的其他信息