我正在使用 cmake 编译我的一个工作项目,这是交易
-
client/
CMakeLists.txt
server/
CMakeLists.txt
libs/
libstuff/
CMakeLists.txt
CMakeLists.txt
所以我希望能够单独编译每个子项目,并从根文件夹构建客户端和服务器。
假设客户端和服务器需要 libstuff。
我尝试将“add_subdirectory”与客户端和服务器 CMakeLists.txt 中的 lib 路径一起使用,它在编译服务器或客户端时有效,但如果您尝试从根目录运行两者:
CMake Error at common/libplugin/CMakeLists.txt:33 (ADD_LIBRARY):
add_library cannot create target "plugin" because another target with the
same name already exists. The existing target is a static library created
in source directory "/home/adrien/git/r-type/common/libplugin". See
documentation for policy CMP0002 for more details.
所以我是 cmake 的新手,我不确定我应该做什么,我应该使用 add_dependency 吗?
感谢您的帮助,
像独立项目一样设置 Stuff 项目,但将变量添加到 cmake 缓存,以便其他项目可以“导入”它。然后,在客户端和服务器中,您可以使用普通调用
include_directories和 target_link_libraries 来引用 Stuff 项目...。 例如在 libstuff 中...
libplugin
然后在客户端(在服务器中类似)
# libstuff CMakeLists
project( Stuff )
# ... whatever you need here: collect source files, ...
add_library( LibStuff ${Stuff_Sources} )
# Then, define a very useful variables which gets exported to the cmakecache and can be
# used by other cmakelists
set( STUFF_INCLUDE_DIRS ${Stuff_SOURCE_DIR} CACHE STRING "Include-dir for Stuff." FORCE )
然后,您可以通过单步进入 Client 目录并在那里运行 make 或 msbuild 来“编译” Client 目录。或者,您可以向 root-cmakelistt 添加一个 cmake-flag,用于在客户端、服务器或两者之间进行过滤...