用于C++项目的CMake文件

Szy*_*ski 3 c++ cmake

我不明白有一些CMake魔法.对于包含这样的目录的小型C++项目,CMakeLists.txt文件应该如何?

.
??? bin
??? src
    ??? src
    ??? test

bin      — directory for built program
src/src  — directory for source
src/test — directory for tests
Run Code Online (Sandbox Code Playgroud)

测试需要包含src/src中的文件.我想管理cmake的所有操作,但是此时我甚至不能让cmake在src/c.cpp中编译文件.

任何帮助,欢迎链接.

Meh*_*olf 7

您的CMake文件应位于主源目录及其子目录中.最简单的方法是CMakeLists.txtsrc目录中有一个,其中包括来自src/src和的所有文件src/test.一个非常简约的例子可能如下所示:

# CMakeLists.txt in src
project(myExample)
set(myExample_SOURCES
        src/file1.cpp
        src/main.cpp)
add_executable(myExecutable ${myExample_SOURCES})

set(myExample_test_SOURCES
        src/file1.cpp
        test/test_file2.cpp
        test/test_main.cpp)
add_executable(myTestSuite ${myExample_test_SOURCES})
Run Code Online (Sandbox Code Playgroud)

通常不指定输出目录,因为您可以使用不同的选项并行使用不同的活动构建,例如,您可以在调试模式下使用一个构建,-O0 -g在发布模式下使用-O2 -g标记,另一个在发布模式下使用重大优化标记-O3.每次构建驻留在自己的目录(例如build-debug,build-rel, build-opt).

您应该bin手动创建输出目录(在您的情况下)并调用cmake此目录中的命令.作为参数,您必须提供主要路径CMakeLists.txt.换句话说,就是执行

cmake ../src
Run Code Online (Sandbox Code Playgroud)

当你在里面的时候bin.这将从src目录中获取所有文件并将输出放到bin目录中.您可以轻松地创建第二个输出目录,例如bin2,您指定不同的构建标志.在ccmake为提供了一个非常简约的GUI.