gcc链接到未使用的库对构建系统性能的影响
我的代码库类似于以下内容: 来源: src/a/b/c.cpp 和单位检验(实际上是提升单位测试可执行文件): test/a/b/c_test.cpp src树在单个可执行目标中使用.但是,c.cpp仅使用该目标的库依赖项的子集,例如-lx,of -lx -ly -lz. 类似地,c_test.cpp编译到链接到c.cpp的-lx,c.o的可执行文件和其他一些用于测试的库. 用于设置构建系统,在这种情况下,我有两个选择: 将每个这样的可执行文件与其自己的库依赖列表配对. (痛苦,但也许可以通过映射标题依赖性 - >库来自动化.) 或,只需使用所有测试可执行文件和主可执行文件的同一库列表即可. (轻松,无痛的方式). #2"大"的构建系统性能影响是什么?真的很重要吗? Misc: 这与G ++(Debian 4.9.1-16)4.9.1 解决方案 答案确实取决于这些库是什么,但是总的来说,我会说"除非图书馆很大,否则可能不会
2 2023-05-24
编程技术问答社区
npm git repository不更新版本
我有一个git回购,我正在尝试将其设置为项目的依赖性. 使用NPM,我的package.json看起来像这样: "devDependencies": { "grunt": "~0.4.0", "grunt-contrib-connect": "~0.2.0", "grunt-contrib-watch": "~0.3.1", "custom": "git://github.com/myGitHubRepo/repo.js.git#b7d53a0cfbe496ad89bde6f22324219d098dedb3", "grunt-contrib-copy": "~0.4.0" } 在第一个 上 npm install 它安装了所有内容,并毫无问题地获取存储库.但是,如果我更改此提案,则说 "custom": "git://github.com/myGitHubRepo/repo.js.git#d6da3a0...", // a d
2 2023-04-28
编程技术问答社区
额外的包含路径和链接器选项 Gradle for C++
我试图使用Gradle编译C ++项目,但是我找不到声明在编译时我想要的其他路径以及在链接时间有哪些其他库的方式. 我已经看到涉及model { }内部项目的解决方案(我不记得确切). (但没有起作用,Gradle一直抱怨非现有功能.) 似乎也不是在Gradle项目中添加Conan依赖性的一种清晰或简单的方法.这让我独自编译库,然后添加到构建系统中,但是我再也找不到路. 我一直在寻找答案,但我发现的只是添加Maven依赖性(但是Glfw,Glew和Dearimgui不在Maven上,我猜...). > 有怪癖吗?我如何才能只注册附加/链接文件? 我的build.gradle.kts: plugins { id("cpp-application") } tasks.register("runDebug") { doLast { exec { executable = "./build/exe/main
6 2023-04-27
编程技术问答社区
Visual Studio是否支持向项目添加MSBuild任务?
我正在尝试将一些简单的MSBUILD任务添加到Visual Studio Project(VS 2012 Express) - 具体来说,要创建一个子目录,然后将一些文件复制到准备包装的输出目录的子目录中. . 我看到VS支持自定义构建步骤,即命令行调用.但是,由于VS基于MSBUILD,因此应该可以直接添加它们作为 msbuild任务喜欢复制任务 http://msdn.microsoft.com/en-us/library/ms366724.aspx" rel =" nofollow">建立后构建预定的目标. 我找不到的是在Visual Studio框架内实际添加此类任务的任何方法. 文档仅从msbuild的角度来谈论它,而不是在Visual Studio的UI中如何工作.它似乎也没有讨论指构建输出等的属性.大概是他们只是MSBUILD使用的那些. 在Visual Studio的UI中是否有支持MSBUILD任务管理的支持,而我的Express Edition只是
0 2023-04-04
编程技术问答社区
如何修改安装路径而不需要再次运行configure脚本/cmake
我正在从事一个项目,该项目需要大量时间来构建(10-15)分钟.我已经重新编译以验证是否存在编译错误.现在,我想更改安装目录,以便我有一个新版本的可执行文件,并具有新的更改.是否有一种方法可以修改安装路径,以便" MAKE INSTARM"安装到新位置而不是旧位置? 解决方案 cmake生成的makefiles支持 destdir编码约定因此,您可以通过在调用时设置DESTDIR变量来覆盖默认安装位置: $ make install DESTDIR=/opt/local 无需重新运行CMAKE. 其他解决方案 我不知道这是否通常是真的,但是我可以举例说明答案 sakra无法正常工作.如果在安装ITK时修改DESTDIR通过修改安装目录,它将仅将DESTDIR附加到已经形成的安装路径上: make install DESTDIR=/opt/local [...] -- Installing: /opt/local/usr/local/lib/cma
2 2023-03-28
编程技术问答社区
如何调整Emacs' compile-goto-error从编译缓冲区获得的路径?
我正在使用Emacs 23,并有以下问题: 我从emacs内部运行我们的项目的构建系统,例如m -x compile-> cd/foo/bar && ./build 现在,构建系统对构建过程的某个子目录进行了一些魔术,然后GCC引发了一个错误: ../src/somesource.cc:50错误:blablabla 现在的问题是,Emacs不会找到该路径,因为它假设编译过程以/foo/bar启动,而不是在/foo/bar/builddir中.因此,领导" ../"对Emacs不起作用,例如运行编译时.有没有办法告诉emacs尝试跳过领先" ../"? 解决方案 最好的解决方案可能是更改构建系统以在更改目录时发出消息. Emacs寻找 Entering directory `...' ... Leaving directory `...' (请参阅compilation-directory-matcher变量.如果您的构建系统更改目录时确实会发出
12 2023-03-22
编程技术问答社区
Sublime Text 2构建系统在一个新的终端/命令提示窗口中编译和运行Java?
我想在Sublime Text 2中制作一个构建系统,该系统将编译Java文件,然后在 new 终端(对于OS X或Linux)或命令提示中(用于Windows) )窗口. 原因是因为Sublime Text 2不允许用户输入任何内容,因此在Sublime Text 2中运行时,任何需要输入的程序都会吐出错误,例如: 这是我目前拥有的(我也尝试了一个批处理文件),但是它只是在Sublime Text 2中运行,而不是在新的Shell中: 这可能吗?如果是这样,请逐步解释(我是Sublime Text 2的菜鸟),如何做;我已经尝试在Sublime Text 2论坛上发布发布,到目前为止还没有运气!我会非常感激.感谢您的时间! 解决方案 这是我为完成这项工作所做的工作的"礼貌"(读:简短且可读). 这仅是起点. Full Impl是博客文章,而不是答案. 假设:OS X,XTERM,无包层次结构等 软件包/项目的东西是相对直率的,但imo尴尬. 我没有
12 2023-03-22
编程技术问答社区
如果设置了一个变量,我如何强制重建一个目标?
假设我有一个构建目标foo: foo:foo.c $(CC) $(CFLAGS) $(ARGS) -c foo.c -o foo 现在,ARGS是我在命令行中传递的东西: $ make ARGS:=-DX=1 foo 因此,我需要绕过使人的聪明才智,因为foo目标不仅取决于哪些文件已更改,还取决于ARGS的值. . 这样做有什么东西吗?我的黑客(请参阅答案)似乎不是最优雅的,但它起作用.有什么好吗? 解决方案 这是您特定问题的一般解决方案. 您希望能够依靠变量作为先决条件.也就是说,您可以使其成为模型中任何目标的先决条件,当变量变化时,您可以重建这些目标. 这是一个可以做到这一点的函数,您可以使用此函数声明一个可靠的变量,然后您可以将其用作先决条件. 请注意,如果未在命令行上使用该变量,则仍然意味着变量仍然具有一个值,即空字符串. define DEPENDABLE_VAR .PHONY: phony $1: phony
8 2023-03-22
编程技术问答社区
标题的宏定义,放在哪里?
定义标头依赖的宏时,例如_FILE_OFFSET_BITS,FUSE_USE_VERSION,_GNU_SOURCE等,将它们放置在哪里? 我考虑过的一些可能性包括 在该文件中包含的标题所示的定义的任何源文件的顶部 在相关标头的包含之前 通过编译器在CPPFLAGS级别定义? (例如-D_FILE_OFFSET_BITS=64)对于: 整个源repo 整个项目 只是需要它的来源 在项目标题中,还应包括宏应用的那些相关标头 我没有想过的其他一些地方,但无限优越 注意:通过适用性,自动工具和其他构建系统的理由是我决定的一个因素. 解决方案 如果宏影响系统标头,他们可能应该去某个地方影响包括这些系统标头的每个源文件(其中包括间接包含它们的标题).因此,最合乎逻辑的位置将在命令行上,假设您的构建系统允许您设置例如cppflags影响每个文件的汇编. 如果您使用预编译标题,并且具有预编译的标题,因此必须首先包含在每个源文件中(例如,用于MSVC项目
0 2023-03-17
编程技术问答社区
CMake-获取多配置生成器的配置参数
我正在使用cmake生成视觉工作室解决方案.我希望我的解决方案具有多种配置-X86调试/发行版和X86_64调试/发行版. 对于每种配置,我都需要将项目链接到不同版本的依赖项(即,我需要64位,调试构建与单元测试库的64位调试版本). 这是我想做的:我将依赖项的二进制版本放在配置之后的文件夹名称中,例如: /deps/x86_64_debug/library.lib 问题是,如何告诉CMAKE在适当的文件夹中查找库?是否有任何cmake变量指示目标平台和释放/调试状态的"当前配置"的"当前配置"? 解决方案 请咨询发电机表达式 在构建系统生成期间评估发电机表达式 产生特定于每种构建配置的信息.
46 2023-03-16
编程技术问答社区
CMake和Ninja--"缺失,没有已知的规则可供制作"
我有这个 cmakelists.txt 文件: cmake_minimum_required(VERSION 3.8) include(${CMAKE_CURRENT_SOURCE_DIR}/src/Something.cmake) add_executable(execute main.cpp) add_dependencies(somethingInterface Something) add_dependencies(execute somethingInterface) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_compile_options(execute PRIVATE -std=c++11 -g ) add_library(library SHARED IMPORTED) set_target_properties(libr
2 2023-03-16
编程技术问答社区
未找到现代CMake的过渡性依赖关系
我目前正在致力于将ROS库实施到我们的公司软件堆栈中.因为库基于ROS,因此使用Catkin,我正在重写图书馆专门使用cmake,并尝试应用. |-- CMakeLists.txt |-- LICENSE |-- README.md |-- grid_map_core | |-- CHANGELOG.rst | |-- CMakeLists.txt | |-- cmake | | `-- grid_map_core-extras.cmake | |-- grid_map_coreConfig.cmake | |-- include | | `-- grid_map_core | | `-- iterators | |-- src | | `-- iterators | `-- test 如果我安装了库并尝试将库中的库中的库添加到目标中,则找不到显示EIGEN3依赖项的错误: CMake Error at CMakeLists.txt:6 (find_package): F
22 2023-03-16
编程技术问答社区
CMake add_subdirectory()
简介: 我正在尝试使用cmake获取跨平台编译脚本(对于Windows32上的vs 9.0和Unix的makefiles). 我正在遇到有关add_subdirectory()的我无法理解的东西. 让我向您展示我的代码: 上下文: 我对名为" module1"的模块的体系结构是这样的: cmakelists.txt 包括/ file1.h file2.h *.h src/ file1.cpp file2.cpp *.cpp 测试/ cmakelists.txt src/ testfile1.cpp testfile2.cpp 我整个应用程序的架构由这些模块组成,这些模块本身就是可以独立工作的项目. 我的目标: 我想编译我的模块作为库 我想在测试/文件夹中使用代码测试库 这是我写的cmakelists: 这是我模块的根目录中的cmakelists.txt. #ENSURE MIN
22 2023-03-16
编程技术问答社区
为什么使用add_library({tgt} IMPORTED)而不是target_link_libraries( -l {.so | .a})?
使用语句的目的是什么: add_library( [SHARED|STATIC] IMPORTED) 即使您在上方创建导入的库目标,您仍然需要指定实际.so或.a的特定位置.这将至少需要3个cmake命令才能链接到一个可执行文件,并且编译器仍然不会自动搜索OS上的通用目录.​​ 示例: cmake code链接以链接导入的lib P> 从CMAKE文档中,我了解到有3种方法可以将库的库链接在您的整体应用程序/库的子标题中. cmake target_link_libraries() > 使用CMAKE软件包作为已发货的包装脚本之一. 使用链接标志: target_link_libraries( [SHARED|STATIC|...] -lncursesw) 或使用导入的库方法(在顶部以代码显示). 使用第二种方法时,一个主要区别在于它仅采用一行代码,并将搜索编译器的所有预定义的预定义的目录OS上的目录.谁能帮助我理解为什
38 2023-03-15
编程技术问答社区
如何将一个Autotools项目转换为CMake项目?
因此,似乎有很多关于Autotools和Cmake的主题的文章,但是对于我的一生,我似乎找不到有关如何从Autotools转换项目的好教程(Makefile.am>>>> and and configure.ac文件)到cmake(CMakeLists.txt文件).一个人怎么做? 解决方案 没有自动化工具可以将任意构建系统从自动工具转换为cmake.我手动转换了一些中等大型项目.我喜欢为每组configure.ac和/或Makefile.am文件创建一个CMakeLists.txt文件,以简化从自动工具到cmake的转换. 可悲的是,这种手动方法需要在两个系统中发展专业知识,其中任何一个无辜者都不应造成任何一种. 捕获自动工具构建实际上在计算机上实际上做的内容的记录.这将帮助您使用相同的编译标志来验证您的CMAKE构建系统实际上对每个文件进行编译,并创建AutoTools所做的每个库和可执行文件;至少在您的机器上,带有您的选择. %./configure [配
106 2023-03-15
编程技术问答社区
如何自定义cmake的输出
例如,在编译.c文件时,我希望CMAKE只能打印 CC xxx.c 像Linux Kbuild一样stdout. 解决方案 CMAKE输出可以通过抑制CMAKE产生的标准消息并在启动器脚本中输出自定义消息来定制.将以下代码添加到您的最外部CMakeLists.txt: set_property(GLOBAL PROPERTY RULE_MESSAGES OFF) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh") 设置全局 rule_messages "> rule_messages 将抑制标准消息. 全局 rule_launch_compile 设置了一个定制的启动脚本custom_output.sh需要添加到cmake源树的根部: #!/bin/sh # shell script invoked with the fo
74 2023-03-15
编程技术问答社区
如何在我的CMake项目中使用需要先安装的库?
我的CMAKE构建系统有问题.有CMakeLists.txt文件定义运行时间或库或使用ExternalProjects_Add()下载和构建外部代码.由于依赖关系,这些项目必须互相找到.现在,我想在最高级别上构建所有这些> CMakeLists.txt.为了找到一个项目,必须安装.但是查找项目已经在CMAKE中的配置时间完成. repository ├─project │ ├─game (Depends on engine, uses EngineConfig.cmake once installed) │ │ ├─CMakeLists.txt │ │ ├─include │ │ ├─src │ │ └─textures │ ├─engine (Depends on boost, uses built-in FindBoost.cmake) │ │ ├─CMakeLists.txt │ │ ├─include │ │ └─src │ ├─boost (Not the source
14 2023-03-15
编程技术问答社区
cmake : 从脚本中设置环境变量
我有一个脚本,可以设置交叉兼容所需的所有变量.这只是其中的一部分: export CONFIG_SITE=~/workspace/eldk-5.4/powerpc/site-config-powerpc-linux export CC="powerpc-linux-gcc -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux" export CXX="powerpc-linux-g++ -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux" export CPP="powerpc-linux-gcc -E -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux" e
28 2023-03-15
编程技术问答社区
Autotools、Cmake和Scons之间有什么区别?
自动工具,CMAKE和SCON之间有什么区别? 解决方案 实际上,Autotools'唯一的"拯救恩典"是所有GNU项目都在很大程度上使用的. 自动工具的问题: 真正的奥术M4宏观语法与详细的,扭曲的外壳脚本结合了"兼容性"的测试,等等. 如果您不关注,您 将 弄乱交叉补偿能力(IT 应清楚地指出,诺基亚提出了Scratchbox/ScratchBox2到侧键 高度 损坏的自动工具为Maemo/Meego构建设置. ,测试中的静态路径,您将打破跨编译支持,因为它不会纪念您的SYSROOT规范,并且会从主机系统中提取东西.如果您违反跨编译支持,它将使您的代码无法使用 openembedded,使试图在交叉补偿器而不是在目标上构建其发行版的发行版变得"有趣". 对古老的,破碎的编译器的问题进行了大量测试,这些问题 当前,当今这个时代,当前几乎可以生产任何东西.除非您在真正的 fight> 上构建诸如libstdc ++或gcc之类的东西,否则Solaris,aix
10 2023-03-15
编程技术问答社区