<target>可以是自定义(custom)target。 需要INTERFACE, PUBLIC和PRIVATE关键字来指定它们后面的源文件路径(<items>)的范围。PRIVATE和PUBLIC项将填充<target>的SOURCES属性,这些属性在构建target本身时使用。PUBLIC和INTERFACE项将填充<target>的INTERFACE_SOURCES属性,这些属性在构建依赖性时使用。由add_custom_target命令创...
在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
INTERFACE 或 PUBLIC 文件集中的文件可以使用 install(TARGETS) 命令进行安装,并使用 install(EXPORT) 和 export() 命令进行导出。 每个target_sources(FILE_SET) 条目以 INTERFACE,PUBLIC 或 PRIVATE 开头,并接受以下参数: FILE_SET 要创建或添加的文件集的名称。它必须只包含字母、数字和下划线。以大写字母开头的名...
target_link_libraries(my_target PUBLIC another_library) 在上面的代码中,my_target不仅可以使用another_library,而且任何链接到my_target的其他目标也可以使用它。 正如《思考,快与慢》中所说:“我们过于依赖第一印象,往往忽略了深入的分析。”(Daniel Kahneman)。在编程中,我们可能会因为对某个工具或命令的第一印...
add_executable(main)set(sources main.cpp other.cpp)target_sources(main PUBLIC ${sources}) 在使用变量的值时,要用美元符号$加花括号来进行取值。 建议把头文件也加上,这样在 VS 里可以出现在“Header Files”一栏。 add_executable(main)set(sources main.cpp other.cpp other.h)target_sources(main PUBLIC...
target_link_libraries(my_target PUBLIC another_library) INTERFACE: 当目标自身不需要此链接库,但其他目标链接了这个目标时使用。 其他目标链接这个目标时,它们会继承这个链接库,但目标自身不会链接这个库。 这主要用于头文件只的库或者当你只想传递链接依赖而不实际链接它们时。
add_executable(main) target_sources(main PUBLIC main.cpp) 多个.cpp源文件的情况 .├── CMakeLists.txt ├── main.cpp ├── other.cpp └── other.h 使用target_sources直接添加 逐个添加即可: add_executable(main) target_sources(main PUBLIC main.cpp other.cpp) 通过设定变量,间接添加 使用...
如果SYSTEM与PUBLIC或INTERFACE一起使用,则INTERFACE_SYSTEM_INCLUDE_DIRECTORIES target属性将填充指定的目录。 target_include_directories的参数可以使用语法为$<...>的"生成器表达式"。 指定的包含目录可以是绝对路径或相对路径。相对路径将被解释为相对于当前源目录(即CMAKE_CURRENT_SOURCE_DIR),并在存储到关联的targe...
target_sources(<target> <INTERFACE|PUBLIC|PRIVATE> [items1...]... 为目标添加要依赖的源文件。 可在add_executable 和 add_library 创建目标后,再通过该命令添加文件。 PRIVATE、PUBLIC (都?)会传递目标的 SOURCES 属性到与该目标链接的目标,用于构建其它目标。
文件集合通过target_sources(FILE_SET)命令定义,如果文件集合<set>存在并且是PUBLIC或INTERFACE,那么集合中的文件会被安装到目的路径。相对文件集合基路径的目录结果会被保留,例如文件集合的基路径是/XXX/YYY,在文件集合中的某个文件路径为/XXX/YYY/myinstalldir/myfile.h,那么在安装目的路径下,会按照myinstalldir/my...