CMAKE - 自定义目标

时间:2016-09-06 14:21:42

标签: c build cmake

我想为构建目的制作几个目标。我有一个项目结构

src
- library in c
test
-test code for lib
example
-example code for lib

我想使用

构建
cmake 
make lib
make test
make example

这可能吗?我试过自定义目标,但我不能

1 个答案:

答案 0 :(得分:1)

只需使用add_executable() / add_library() - 每个目标都会创建一个制作目标。

通常,项目根目录中有android.os.TransactionTooLargeException(=根文件),每个源目录中有一个。这给你一个很好的&清洁项目结构。

这听起来比实际更多......

CMakeLists.txt

CMakeLists.txt(项目根目录)

<<Project Dir>>
|
+- CMakeLists.txt
|
+- src/
|  |
|  +- CMakeLists.txt
|  |
|  +- library in c
|
+- test/
|  |
|  +- CMakeLists.txt
|  |
|  +- test code for lib
|
+- example/
   |
   +- CMakeLists.txt
   |
   +- example code for lib

的src /的CMakeLists.txt

cmake_minimum_required(VERSION 3.0) # Or what you can use
project(Example VERSION 0.1)

# Add each subdir
add_subdirectory("src")
add_subdirectory("test")
add_subdirectory("example")

测试/ CMakeList.txt

注意:目标add_library(lib Src1.c Src2.c) 已保留,将运行您的测试(ctest)

test

示例/的CMakeLists.txt

add_executable(tests Test1.c Test2.c)

用法

不要从项目根目录运行Cmake,而是更好地做一个out-of-source-buid:

add_executable(example1 Example1.c)
target_link_libraries(example1 lib)

add_executable(example2 Example2.c)
target_link_libraries(example2 lib)

现在生成/本地的所有内容都在mkdir build && cd build cmake .. make # Will build all targets (you can also do make example etc). 之内,并且该项目保持清洁。您通常希望将该目录添加到例如。 build

按目标构建:

.gitignore

您也可以制作构建make tests make example1 make example1 make lib # ... example1的目标。 CMake几乎可以做任何事情。

Dokumentation