关于CMake命令选项与配置方式的技术咨询
CMake相关问题解答
问题1:cmake --build . -j -t label_image命令中-t选项的具体含义
-t是--target的简写参数,作用是指定本次构建仅针对项目中的特定目标。在这条命令里,就是只编译构建名为label_image的目标(通常是可执行程序、静态库/动态库这类编译产物),而非构建整个项目包含的所有目标。搭配-j(启用多线程加速构建)使用,能更高效地生成你需要的特定产物,避免无意义的全量编译。
问题2:命令行指令cmake ./ -DTFLITE_ENABLE_GPU=ON与CMakeLists.txt中set(TFLITE_ENABLE_GPU ON)的作用是否一致?
两者不完全等效,核心差异体现在变量类型和优先级上:
- 命令行的
-D<VAR>=<VALUE>是直接设置CMake缓存变量,这个变量会被写入CMake的缓存文件(如CMakeCache.txt),后续重新配置项目时会保留该值,除非手动清除缓存或用新的-D参数覆盖。 - CMakeLists.txt里的
set(TFLITE_ENABLE_GPU ON)默认创建的是普通本地变量,仅在当前作用域生效,不会写入缓存,也不会影响后续的项目重新配置。若要让CMakeLists里的设置与命令行-D等效,需要将变量声明为缓存变量,写法为:set(TFLITE_ENABLE_GPU ON CACHE BOOL "Enable GPU support for TFLITE" "")。
此外,优先级方面:命令行通过-D设置的缓存变量,优先级高于CMakeLists.txt中不带FORCE参数的缓存变量设置。也就是说,若CMakeLists里用set(... CACHE ...)设置了默认值,命令行的-D参数可以覆盖该默认值;但如果CMakeLists里用set(... CACHE ... FORCE),则会强制覆盖命令行的设置。
内容的提问来源于stack exchange,提问作者YeongHwa Jin
相关产品推荐
相关产品推荐

