Visual studio 2015 具有多个相互依赖项目的CMake
我的团队正在讨论将我们的开发环境迁移到CMake。我们的软件(大部分)由两个主要应用程序组成: ProcessingHub-从传感器获取信息,对其进行处理并广播 客户端从ProcessingHub接收数据广播,并提供友好的API来检索数据 除了许多其他项目外,这两个软件都使用静态库作为操作系统接口层;我叫它OsInterfaceLib ProcessingHub还使用了另外两个被认为是独立库的静态库,因为它们不仅仅用于ProcessingHub。我将它们称为ProcessingLib和SensorLib 我们的SVN结构如下:Visual studio 2015 具有多个相互依赖项目的CMake,visual-studio-2015,cmake,Visual Studio 2015,Cmake,我的团队正在讨论将我们的开发环境迁移到CMake。我们的软件(大部分)由两个主要应用程序组成: ProcessingHub-从传感器获取信息,对其进行处理并广播 客户端从ProcessingHub接收数据广播,并提供友好的API来检索数据 除了许多其他项目外,这两个软件都使用静态库作为操作系统接口层;我叫它OsInterfaceLib ProcessingHub还使用了另外两个被认为是独立库的静态库,因为它们不仅仅用于ProcessingHub。我将它们称为ProcessingLib和Senso
- 树干
- 加工中心
- 客户
- OsInterfaceLib
- 处理库
- 传感器库
add\u子目录
命令。这在ProcessingLib中失败,因为它必须使用与其他工具链不同的工具链构建。据我所知,工具链只能在调用cmake时设置,因此从顶级ProcessingHub或客户端CMakeLists.txt一次生成所有内容是行不通的
我的问题是:是让我们的项目保持他们更好的声音,还是有干净、简单的方法让我们制作:
可以通过变量设置C++编译器,但是注意这必须在任何代码>项目()/<代码>或<代码> Enable语言()/<代码>命令> /< P>之前完成。 一种简单的方法是在子目录中调用
project()
:
顶级CMakeLists.txt:
add_subdirectory(ProcessingLib)
add_subdirecdory(Others)
set(CMAKE_CXX_COMPILER /path/to/clang)
project(ProcessingLib)
...
project(Others)
...
ProcessingLib CMakeLists.txt:
add_subdirectory(ProcessingLib)
add_subdirecdory(Others)
set(CMAKE_CXX_COMPILER /path/to/clang)
project(ProcessingLib)
...
project(Others)
...
其他CMakeLists.txt:
add_subdirectory(ProcessingLib)
add_subdirecdory(Others)
set(CMAKE_CXX_COMPILER /path/to/clang)
project(ProcessingLib)
...
project(Others)
...
但是,在文档中查找以下内容:
项目的顶级CMakeLists.txt
文件必须包含对命令的文本直接调用;通过命令加载一个是不够的。如果不存在此类调用,CMake将在顶部隐式添加一个调用,以启用默认语言(C
和CXX
)
因此,您最好将ProcessingLib
构建为一个而不是一个子目录:
include(ExternalProject)
ExternalProject_Add(ProcessingLib
SOURCE_DIR /path/to/ProcessingLib
CMAKE_ARGS -DCMAKE_CXX_COMPILER=/path/to/clang
)
如果在
ExternalProject\u Add
命令中指定CMAKE\u GENERATOR
和CMAKE\u ARGS
,则此操作有效<代码>添加库(静态导入的也需要建立可链接到可执行文件的目标。但是,在导入的libs上生成的vcxproj似乎是一个仅在其目录上运行cmake的shell-解决方案资源管理器中未填充任何源、头和资源筛选器