我有一个子模块(用add_subdirectory添加的),它有一个应该用-j1构建的目标。我能改变CMakeLists.txt以确保它总是这样构建吗?我目前的解决方法是在构建使用它的目标之前单独构建这个目标。
add_subdirectory
-j1
CMakeLists.txt
q8l4jmvw1#
JOB_POOL
Ninja only:可用池的列表。池是一个命名的整数属性,它定义分配给池的规则可以启动的并发作业的最大数量。JOB_POOLS属性是一个分号分隔的对列表,使用语法NAME=integer(等号后面没有空格)。例如:
JOB_POOLS
set_property(GLOBAL PROPERTY JOB_POOLS two_jobs=2 ten_jobs=10)
定义的池可以通过设置CMAKE_JOB_POOL_COMPILE和CMAKE_JOB_POOL_LINK来全局使用,也可以通过设置目标属性JOB_POOL_COMPILE和JOB_POOL_LINK来针对每个目标使用。自定义命令和自定义目标可以使用选项JOB_POOL来指定池。使用不是由JOB_POOLS定义的池会导致ninja在构建时出错。如果未设置,则此属性使用CMAKE_JOB_POOLS变量的值。由CMake提供的用于个人交互使用(如安装)的生成目标将自动放置在控制台池中。您需要执行以下操作:
CMAKE_JOB_POOL_COMPILE
CMAKE_JOB_POOL_LINK
JOB_POOL_COMPILE
JOB_POOL_LINK
CMAKE_JOB_POOLS
set_property(GLOBAL APPEND PROPERTY JOB_POOLS "no_parallel=1") set_property(TARGET your_target_name PROPERTY JOB_POOL_COMPILE "no_parallel") get_property(target_deps TARGET your_target_name PROPERTY LINK_LIBRARIES) set_target_propertes(${target_deps} PROPERTIES JOB_POOL "no_parallel") unset(target_deps)
关于为依赖项设置它的部分--我不确定如果任何依赖项在生成器表达式中是否有效。如果无效,您可以与CMake开发团队进行讨论。免责声明:我从来没有真正尝试过这个,我不知道它是否工作。
1条答案
按热度按时间q8l4jmvw1#
JOB_POOL
mechanism:Ninja only:可用池的列表。
池是一个命名的整数属性,它定义分配给池的规则可以启动的并发作业的最大数量。
JOB_POOLS
属性是一个分号分隔的对列表,使用语法NAME=integer(等号后面没有空格)。例如:
定义的池可以通过设置
CMAKE_JOB_POOL_COMPILE
和CMAKE_JOB_POOL_LINK
来全局使用,也可以通过设置目标属性JOB_POOL_COMPILE
和JOB_POOL_LINK
来针对每个目标使用。自定义命令和自定义目标可以使用选项JOB_POOL
来指定池。使用不是由JOB_POOLS
定义的池会导致ninja在构建时出错。如果未设置,则此属性使用
CMAKE_JOB_POOLS
变量的值。由CMake提供的用于个人交互使用(如安装)的生成目标将自动放置在控制台池中。
您需要执行以下操作:
关于为依赖项设置它的部分--我不确定如果任何依赖项在生成器表达式中是否有效。如果无效,您可以与CMake开发团队进行讨论。
免责声明:我从来没有真正尝试过这个,我不知道它是否工作。