下边的几个项目命令中包含该项
add_executable
add_library
add_subdirectory
如果他们设置了该项,当我们在最顶级目录(比如:mytest/build, build目录就是我们自己创建的二进制目录)执行cmake --build .,那么他们对应的target 将不会被编译的。如果被编译了,那你的当前的taget 应该是被的地方的引用。必须做到完全独立,才会不被编译,比如你添加到add_library, 当前的library 不应该被别的library或者executable所引用。
mytest/build> cmake --build .
如果只是在add_subdirectory 上设置并且其下边的对应的target 没有设置,则我们是可以切换到对应目录下进行编译cmake --build . , 它是可以被编译的
mytest/build> cd sub
mytest/build/sub>cmake --build .
关于mytest 目录树和实现:
mytest/build
mytest/CMakeLists.txt
===========================================
cmake_minimum_required(VERSION 3.27)
project(mytest)
add_executable(main EXCLUDE_FROM_ALL main.c)
target_link_libraries(main PRIVATE sub)
add_subdirectory(sub EXCLUDE_FROM_ALL)
===========================================
mytest/main.c
mytest/sub
mytest/sub/sub.c
mytest/sub/CMakeLists.txt
============================================
cmake_minimum_required(VERSION 3.27)
add_library(sub sub.c)
target_include_directories(sub PUBLIC .)
============================================