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