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_Dependencies_Installation_Project - Fatal编程技术网

如何在使用cmake构建外部项目时不执行安装步骤

如何在使用cmake构建外部项目时不执行安装步骤,cmake,dependencies,installation,project,Cmake,Dependencies,Installation,Project,我正在使用cmake ExternalProject\u Add命令构建依赖项项目: include(ExternalProject) ... set(COMMON_BASE_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../CommonBase) ExternalProject_Add(CommonBaseProject SOURCE_DIR ${COMMON_BASE_PROJECT_DIR} BINARY_DIR ${COMMON_BASE_P

我正在使用cmake ExternalProject\u Add命令构建依赖项项目:

include(ExternalProject)
...
set(COMMON_BASE_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../CommonBase)

ExternalProject_Add(CommonBaseProject
  SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
  BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
  INSTALL_COMMMAND ""
)   

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${COMMON_BASE_PROJECT_DIR}/include)

add_library(
    ${LIBRARY_NAME}
    SHARED
    ${SRC_FILES}
    ${INCLUDE_FILES}
)

target_link_libraries (Bios ${COMMON_BASE_PROJECT_DIR}/build/libCommonBase.dll)
add_dependencies(Bios CommonBaseProject)
但我得到了一个错误:

[100%] Linking CXX shared library libCommonBase.dll
[100%] Built target CommonBase
[ 50%] Performing install step for 'CommonBaseProject'
make[3]: *** No rule to make target 'install'.  Stop.

我不需要执行安装步骤,所以我的问题是:如何禁用它?

您可以使用
步骤\u TARGETS build
为构建步骤生成目标,并添加对该特定目标的依赖关系。步骤目标被命名为
-
,因此在本例中,表示生成步骤的目标将被命名为
CommonBaseProject build

您可能还希望使用
exclude\u from\u all TRUE
将CommonBaseProject从“all”目标中排除

ExternalProject_Add(CommonBaseProject
  SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
  BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
  STEP_TARGETS build
  EXCLUDE_FROM_ALL TRUE
)

add_dependencies(Bios CommonBaseProject-build)

您几乎已经拥有了它:而不是
INSTALL\u COMMAND”“
put

    INSTALL_COMMAND cmake -E echo "Skipping install step."

与您的问题无关,问题已经得到了回答,但就我而言,我有以下
ExternalProject\u Add
指令:

ExternalProject_Add(external_project
    # [...]
    # Override build/install command
    BUILD_COMMAND ""
    INSTALL_COMMAND
        "${CMAKE_COMMAND}"
        --build .
        --target INSTALL    # Wrong casing for "install" target
       --config ${CMAKE_BUILD_TYPE}
)

在这种情况下,cmake退出时出现了非常类似的错误(
***没有规则让目标“安装”
),但在这种情况下,外部项目正在查找不正确的大写字母
安装
目标:正确的大小写是
安装
。显然,这在Windows和MSVC中起作用,但在unix操作系统中失败。

您的意思是删除“安装命令”行吗?我试过了,但结果是一样的。你也可以使用
true
命令,它们什么也不做,即
INSTALL\u命令true
。但在执行安装步骤时,它仍将显示
。这很有效<代码>安装命令“
不够,cmake仍将运行
安装
步骤。是否有方法在以后为外部项目手动调用安装步骤?例如,作为主项目安装步骤的一部分,您可以
添加依赖项(install CommonBaseProject install)
,但这不会全局安装外部项目。如果未更改,将安装到本地生成目录。