3

这是我当前的目录结构:

projectFolder/CMakeLists.txt
projectFolder/src       /* holds all project .cpp files */
projectFolder/include   /* holds all header files*/
projectFolder/test      /* holds all test .cpp files*/
projectFolder/ext/gtest /* holds all files associated with googletest, 
                           including it's CMakeLists.txt file */

目前有效的是:

  1. projectFolder/ext/gtest使用 cmake 和 ninja构建文件
  2. projectFolder使用 cmake 和 ninja构建文件

缺点是 googletest 位于我项目的子目录中,这意味着我必须为每个项目复制其源文件

我想做的是从项目目录树中删除 googletest 的源文件并将其移动到一个3rdParty文件夹中。然后,我希望能够在我从项目build文件夹中使用 cmake 和 ninja 时编译谷歌测试,有效地为我拥有的每个项目创建单独的二进制文件,而不必在项目的目录树中拥有源文件(二进制文件将被创建新在项目文件夹的子目录中build。)

当我将gtest项目文件夹移出时,出现以下错误:

When specifying an out-of-tree source a binary directory 
must be explicitly specified.

当我指定一个二进制目录时,add_subdirectory(${EXT_PROJECTS_DIR}/gtest ${CMAKE_CURRENT_BINARY_DIR}/gtest)我得到

ninja: error: 
    'gtest/src/googletest-build/libgtest.a', needed by 
    'google-test-examples_test', missing and no known rule to make it

我试图将 googletest 与 链接find_package,但 cmake 没有找到 googletest。另外,我不确定当我使用find_package二进制文件为每个项目重新编译时,有人可以验证或反驳这一点吗?

我在 Mac 上运行狮子

4

0 回答 0