Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有不同参数的Cmake链接库_Cmake - Fatal编程技术网

具有不同参数的Cmake链接库

具有不同参数的Cmake链接库,cmake,Cmake,我使用cmake-3.15.3进行生成,然后使用ninja构建可执行文件 我有两个依赖于同一库的可执行文件(两个不同的CMakeLists.txt),我使用两个可执行文件中的target\u link\u库链接到它们 此库具有调用自定义python脚本的自定义命令add_custom_command 问题: 我想从不同的可执行文件向这个自定义命令python脚本传递不同的参数。可能吗 公共图书馆: CMakeLists.txt add_library(common_lib) add_custo

我使用
cmake-3.15.3
进行生成,然后使用
ninja
构建可执行文件

我有两个依赖于同一库的可执行文件(两个不同的
CMakeLists.txt
),我使用两个可执行文件中的
target\u link\u库
链接到它们

此库具有调用自定义python脚本的自定义命令
add_custom_command

问题: 我想从不同的可执行文件向这个自定义命令python脚本传递不同的参数。可能吗

公共图书馆:

CMakeLists.txt
add_library(common_lib)

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/input_file.c
  COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/info_generate.py
    -d ${CMAKE_CURRENT_SOURCE_DIR}
    -r ${PROJECT_SOURCE_DIR}
    -o input_file.c ${foobarBAZ}
  DEPENDS ${MR_FILES} ${PROJECT_SOURCE_DIR}/info_generate.py
  COMMENT Generating input_file.c
)

执行1:

CMakeLists.txt
add_executable(exec1)

target_link_libraries(exec1
common_lib)
执行2:

CMakeLists.txt
add_executable(exec2)

target_link_libraries(exec2
common_lib)
我想从不同的可执行文件向这个自定义命令python脚本传递不同的参数

不要编写意大利面代码-库用户应该对库本身没有影响。库是自包含的,依赖于库的库不应修改库本身

可能吗

创建将创建库的函数:

cmake_include_guard()
function(add_mycommonlib_library target)
    add_custom_command(
       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/input_file.c
       COMMAND .... ${ARGV}
    )
    add_library(${target} ${CMAKE_CURRENT_BINARY_DIR}/input_file.c)
endfunction()
然后你会:

# exec1 CMakeLists.txt
include(../gen_common_lib.cmake)
add_mycommonlib_library(exec1_common_lib --some-argument)
add_executable(exec1)
target_link_libraries(exec1 exec1_common_lib)

知道了。因此,在这种情况下,它看起来像丑陋的黑客。需要考虑如何不做这一切。。。不过还是要谢谢你。我认为最好的解决方案是将一个公共库拆分成两个lib,并在每个可执行文件中链接一个必要的lib。看起来不错。研究其他项目如何处理此类情况:我了解cuda或zephyr。