如何正确设置CMake项目?

时间:2014-09-09 07:59:17

标签: c++ cmake

虽然很容易找到关于如何使用CMake的表面级别信息,但是如何正确使用CMake的信息似乎很难找到。如何在一个体积适中的CMake项目(一个可执行文件,该可执行文件使用的一个或多个静态库,静态库使用的一个或多个外部依赖项)中对文件夹和CMakeList.txt文件进行排序?什么CMakeList.txt文件应该有什么命令?

2 个答案:

答案 0 :(得分:3)

学习如何有效使用CMake的好方法是查看其他项目。 LLVM及其子项目就是一个很好的例子。

通常,良好的编码实践会转换为良好的CMake实践;你想要模块化,清晰的风格和灵活性。

这方面的一个示例可能是在src目录中建立可执行文件的规则,然后在根项目文件夹中使用该目标。像这样:

-my_proj
|
----CMakeLists.txt //contains directives for top-level dependencies and linking, includes subfolders
----src
    |
    ----CMakeLists.txt //contains definition of your main executable target
    ----internal_lib
        |
        ----CMakeLists.txt //contains definition of your internal static libraries

my_proj /的CMakeLists.txt

add_subdirectory(src)
find_package (Threads REQUIRED) #find pthreads package
target_link_libraries (my_exe my_lib ${CMAKE_THREAD_LIBS_INIT}) #link against pthreads and my_lib

my_proj / SRC /的CMakeLists.txt

add_subdirectory(internal_lib)
add_executable(my_exe my_source1.cpp mysource2.cpp)

my_proj / SRC / internal_lib /的CMakeLists.txt

add_library(my_lib my_lib_source1.cpp my_lib_source2.cpp)

答案 1 :(得分:1)

我希望this tutorial正是您为一个包含一个可执行文件和多个库的简单项目的CMake配置开始所需的 - 看一看!我发现CMake by Example无论如何都是学习CMake的最佳方式:

  

将CMake与可执行文件一起使用

add_executable(myapp main.c)
     

将CMake与静态库一起使用

add_library(test STATIC test.c)
     

将CMake与动态库结合使用

add_library(test SHARED test.c)
     

使用CMake将库链接到可执行文件

add_subdirectory(libtest_project) 

add_executable(myapp main.c)

target_link_libraries(myapp test)