在CMake中使用find_package时,是否会显式包含标头
Does the header would be included explicitly when use find_package in CMake?
当我为C++使用PyTorch时,只需使用find_package来设置依赖关系非常容易。这是CMakeLists.txt
:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(dcgan)
set(CMAKE_PREFIX_PATH /User/root/libtorch) # I added this line, does it effect?
find_package(Torch REQUIRED)
add_executable(dcgan dcgan.cpp)
target_link_libraries(dcgan "${TORCH_LIBRARIES}")
set_property(TARGET dcgan PROPERTY CXX_STANDARD 14)
没有任何包含标头的显式命令,但如果存在target_link_libraries(dcgan "${TORCH_LIBRARIES}")
,则可以找到标头。我很好奇为什么即使没有target_include_directories(dcgan PUBLIC ${TORCH_INCLUDE_DIRS})
也能找到头文件。
该代码在PyTorch的官方网站上,适用于MacOS和Linux。发生了什么。
添加:包位于编译器一无所知的目录中。
include路径可以设置为依赖项中的传播设置:
target_link_libraries
指定链接给定目标时要使用的库或标志和/或其家属。链接库目标的使用要求将为传播。目标依赖项的使用要求影响汇编自己的资料。
https://cmake.org/cmake/help/latest/command/target_link_libraries.html
这意味着target_link_libraries
将配置目标。它将设置target_compile_features
、target_compile_options
、target_compile_directories
,如果它们在依赖关系中设置为INTERFACE
或PUBLIC
。
例如
add_library(Lib ${SRCS_LIB})
target_include_directories(Lib INTERFACE ${DIRECTORY})
add_exectuable(Exe ${SRCS_EXE})
target_link_libraries(Exe PRIVATE Lib)
在本例中,Exe
将继承来自Lib
的include目录。您不需要显式地设置它们。
柯南也是这样工作的,例如开始
cmake_minimum_required(VERSION 2.8.12)
project(MD5Encrypter)
add_definitions("-std=c++11")
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(md5 md5.cpp)
target_link_libraries(md5 ${CONAN_LIBS})
以及在有效的现代CMake 中如何描述
使用外部包的导出目标
不要回到过去CMake使用外部包定义的变量的样式。使用而是通过CCD_ 12导出目标。
最佳做法是不要对依赖项使用target_include_directories
。
- 在CMake中使用find_package时,是否会显式包含标头
- C++-字符串是否包含一个带有简单循环的单词
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 检查路径是否包含C++中的另一个路径
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- C++17:使用 std::optional 来评估枚举是否包含值
- 如何检查 int 变量是否包含合法(非陷阱表示)值?
- 如何确定integer_sequence在编译时是否包含给定的数字?
- 使用预处理指令检查是否包含标头?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 更智能地在C++中包含保护,以便在不同的命名空间中多次包含标头
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 如何在 c++ 中有条件地包含标头?
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 是否可以链接到,包括和使用静态库,而无需额外包含标头/文件
- 有没有一种方法可以通过宏来检测标准标头是否包含在其中
- 是否未指定标准库标头是否包含任意标头
- 是否可以知道是否包含标头