如何在不将目录包含到彼此编译命令中的情况下构建目标?

Posted

技术标签:

【中文标题】如何在不将目录包含到彼此编译命令中的情况下构建目标?【英文标题】:How to build targets without including directories into each other compiling command? 【发布时间】:2019-08-06 12:52:27 【问题描述】:

我在一个项目中有多个目标,还有子项目。

在 CMakeLists.txt 的顶部有必要文件夹的包含:

include_directories(8021QBG)
include_directories(8021x)

#sub project
add_subdirectory(test)

然后我有构建命令的描述。它们对于所有库都完全相同:

file(GLOB SOURCE_FILES
        8021QBG/*.h
        8021QBG/*.cpp
        )
add_library(8021qbg SHARED
        $SOURCE_FILES
        )
set_target_properties(8021qbg PROPERTIES LINKER_LANGUAGE CXX)
set(CMAKE_CXX_FLAGS_CUSTOM "-lxml2 -lm")
set_target_properties(8021qbg PROPERTIES COMPILE_FLAGS " $CMAKE_CXX_FLAGS_CUSTOM $CMAKE_CXX_FLAGS_COMMON")

但是当我构建项目时,无论什么库我看到的开头都是一样的:

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021QBG -I/home/user/cmake_libs/8021x 

但是 8021QBG 和 8021x - 不同的库。

它将所有目录包含在每个编译命令中。

每个库如何拆分包含的目录?

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021QBG

分开

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021x 

【问题讨论】:

COMPILE_FLAGS 属性用于 compiler 标志,而不是添加链接器库(通常使用 target_link_libraries: @987654330 @ @Someprogrammerdude,是的,谢谢你,我会解决的。分手包括什么?你能帮帮我吗? 也许改用target_include_directories @Someprogrammerdude,我在我的测试子项目中添加了这个命令target_include_directories(test PRIVATE coding/variable_field coding/packet coding/utils ),重建后我仍然看到这个“测试”目标的其他包含 是的,include_directories 为全球所有个目标设置。 【参考方案1】:

如果你想构建两个不同的目标,你有两个不同的包含,我建议这样做:

关注这个Ref 有了这个,您可以为每个库创建一个目标。

如果您将这两个库包含在同一个目标上,您将在同一构建命令行中同时包含这两个库。

【讨论】:

我在我的测试子项目中添加了这个命令target_include_directories(test PRIVATE coding/variable_field coding/packet coding/utils ),重建后我仍然看到这个“测试”目标的其他包含 您应该删除命令 include_directories。此命令包含在项目中的目录,当您在此项目中构建任何目标时,它将包含该目录列表。在您的情况下,您应该包括每个目标。

以上是关于如何在不将目录包含到彼此编译命令中的情况下构建目标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将空值发送到输出数组的情况下拆分字符串

如何在不将其添加到目录的情况下在多个团队中安装机器人?

如何在不将批处理文件复制到 c 中的 7zip 文件夹的情况下运行 7zip 批处理

如何在不将实例模型添加到数据库的情况下向实体模型添加FK约束?

在不将单个像素值转换为浮点数的情况下调整目标分割图的大小

如何在不将其添加到子视图的情况下截取 uiview?