为什么运行 cmake 命令后构建文件夹为空?

问题描述 投票:0回答:1

我正在尝试按照 tutorial 进行操作,但我无法弄清楚为什么我的

build_debug
build_release
是空的,并且当我运行
cmake -DCMAKE_BUILD_TYPE=Debug ../
然后运行
make

时没有编译任何内容

我正在尝试编译以下内容

#include <gtkmm.h>
int main(int argc, char * argv[])
{
    auto app = Gtk::Application::create("org.gtkmm.example");
    return 0;
}

父母的内容

CMakeLists.txt

cmake_minimum_required(VERSION 3.26)
project(exmaple)
find_package(PkgConfig)
pkg_check_modules(GTKMM gtkmm-4.0)
add_subdirectory(src)

和孩子

CMakelists.txt
src

link_directories(
    ${GTKMM_LIBRARY_DIRS}  )

include_directories(
    ${GTKMM_INCLUDE_DIRS}  )

add_executable(app
    main.cpp)

target_link_libraries(app 
    ${GTKMM_LIBRARIES}  )

运行后

cmake -DCMAKE_BUILD_TYPE=Debug ../
两个构建文件夹都是空的。目录树如下所示:

.
├── build_debug
├── build_release
├── CMakeCache.txt
├── CMakeFiles
│   ├── 3.26.1
│   │   ├── CMakeCCompiler.cmake
│   │   ├── CMakeCXXCompiler.cmake
│   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   ├── CMakeSystem.cmake
│   │   ├── CompilerIdC
│   │   │   ├── a.out
│   │   │   ├── CMakeCCompilerId.c
│   │   │   └── tmp
│   │   └── CompilerIdCXX
│   │       ├── a.out
│   │       ├── CMakeCXXCompilerId.cpp
│   │       └── tmp
│   ├── app.dir
│   │   ├── build.make
│   │   ├── cmake_clean.cmake
│   │   ├── compiler_depend.internal
│   │   ├── compiler_depend.make
│   │   ├── compiler_depend.ts
│   │   ├── DependInfo.cmake
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── link.txt
│   │   ├── progress.make
│   │   └── src
│   │       ├── main.cpp.o
│   │       └── main.cpp.o.d
│   ├── cmake.check_cache
│   ├── CMakeConfigureLog.yaml
│   ├── CMakeDirectoryInformation.cmake
│   ├── Makefile2
│   ├── Makefile.cmake
│   ├── pkgRedirects
│   ├── progress.marks
│   └── TargetDirectories.txt
├── cmake_install.cmake
├── CMakeLists.txt
├── Makefile
└── src
    ├── app
    ├── CMakeFiles
    │   ├── app.dir
    │   │   ├── build.make
    │   │   ├── cmake_clean.cmake
    │   │   ├── compiler_depend.make
    │   │   ├── compiler_depend.ts
    │   │   ├── DependInfo.cmake
    │   │   ├── depend.make
    │   │   ├── flags.make
    │   │   ├── link.txt
    │   │   ├── main.cpp.o
    │   │   ├── main.cpp.o.d
    │   │   └── progress.make
    │   ├── CMakeDirectoryInformation.cmake
    │   └── progress.marks
    ├── cmake_install.cmake
    ├── CMakeLists.txt
    ├── main.cpp
    └── Makefile

15 directories, 50 files
cmake makefile gtkmm
1个回答
0
投票

您进行了源内构建而不是源外构建。您可以使用生成命令的

-B
标志指定构建目录的位置,并使用生成命令的
-S
标志
指定源目录。

这是文档中的表格,描述了如果您不指定、部分或全部这些标志会发生什么:

命令行 源目录 构建目录
cmake src
src
cwd
cmake build
(现有)
加载
build
cmake -S src
src
cwd
cmake -S src build
src
build
cmake -S src -B build
src
build
cmake -B build
cwd
build
cmake -B build src
src
build
cmake -B build -S src
src
build

看到您预先创建了

build_debug/
build_release/
,并且您正在使用
-DCMAKE_BUILD_TYPE=...
仅适用于单配置生成器,您可能打算做的是以下几行(当前工作目录是项目的根目录(包含
src/
的目录)):

cmake -S . -B build_debug -DCMAKE_BUILD_TYPE=Debug ...
cmake -S . -B build_release -DCMAKE_BUILD_TYPE=Release ...
© www.soinside.com 2019 - 2024. All rights reserved.