标签: cmake

为python windows安装cmake时出错

我有 Windows 10 和新的 Python 3.6.1。我试图安装包 Cmake 0.6.0(需要另一个包,atari-py)使用

pip install cmake
Run Code Online (Sandbox Code Playgroud)

但我遇到了一个错误。

我安装了以下软件包:pip、scikit-build、setuptools、wheel、pybdist。我的帐户名中确实有一个外来符号(经验教训),但是在安装其他软件包时它可以正常工作。我不是一个熟练的 Windows 管理员。

Collecting cmake
  Using cached cmake-0.6.0.tar.gz
Building wheels for collected packages: cmake
  Running setup.py bdist_wheel for cmake: started
  Running setup.py bdist_wheel for cmake: finished with status 'error'
  Complete output from command C:\Python\Python36-32\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\?ejkis\\AppData\\Local\\Temp\\pycharm-packaging1\\cmake\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d C:\Users\EJKIS~1\AppData\Local\Temp\tmp3br7eri7pip-wheel- --python-tag cp36:
  Traceback (most recent call last):
    File "C:\Python\Python36-32\lib\site-packages\skbuild\setuptools_wrap.py", line 405, in setup
      cmkr = cmaker.CMaker()
    File "C:\Python\Python36-32\lib\site-packages\skbuild\cmaker.py", line 67, in …
Run Code Online (Sandbox Code Playgroud)

python pip cmake

0
推荐指数
2
解决办法
2万
查看次数

cmake execute_process 命令

CMakeList.txt:

set(MAKE_CMD "${CMAKE_CURRENT_SOURCE_DIR}/makeHeaders.sh ${CMAKE_CURRENT_SOURCE_DIR} ${INC_DIR}")
MESSAGE("COMMAND: ${MAKE_CMD}")
execute_process(COMMAND "${MAKE_CMD}"   
   RESULT_VARIABLE CMD_ERROR
   OUTPUT_FILE CMD_OUTPUT)
MESSAGE( STATUS "CMD_ERROR:" ${CMD_ERROR})
MESSAGE( STATUS "CMD_OUTPUT:" ${CMD_OUTPUT})
Run Code Online (Sandbox Code Playgroud)

cmake .. 输出:

COMMAND: /home/src/makeHeaders.sh /home/src /home/include
-- CMD_ERROR:No such file or directory
-- CMD_OUTPUT:
Run Code Online (Sandbox Code Playgroud)

如果我复制上面 cmake 打印的命令,将其粘贴到命令行上,它工作正常

这里 makeHeaders.sh

#!/bin/bash
echo In makeHeaders.sh
echo first: $1
echo second $2
echo Making fxsizec.h
echo grep VERSION $1/config/6/cfs.c | grep '^#define' | grep -v 'PGM_V' > $2/fxsizec.h  
echo Making fxsizeo.h
echo grep VERSION $1/opaid/WRS.c | grep '^#define' | grep -v …
Run Code Online (Sandbox Code Playgroud)

bash cmake

0
推荐指数
1
解决办法
2万
查看次数

使用非标准包含和库目录的 CMake 最佳实践

我一直在尝试使用 CMake 在工作的 Linux 机器上构建 Mozilla RR。我们有一个稍微古怪的安排,其中共享库存储在网络驱动器上的位置,如/sw/external/product-name/linux64_g63.dll/. 此外,我在$HOME/sw/. (我不是这个盒子上的sudoer。)

我很困惑我应该如何与 CMake 通信以查看非标准目录。到目前为止,我已经捏造了:

PKG_CONFIG_PATH=$HOME/sw/capnproto-0.6.1/lib/pkconfig \
 CC=gcc-6.3 CXX=g++-6.3 \
 cmake \ 
 -DCMAKE_INSTALL_PREFIX=$HOME/sw/rr-5.1.0 \
 -DPYTHON_EXECUTABLE=$HOME/bin/python2 \
 -DCMAKE_FIND_ROOT_PATH=$HOME/sw/libseccomp-2.2.3/ \
 ../src/
Run Code Online (Sandbox Code Playgroud)

这显然不是一个可扩展的解决方案,但它至少成功完成了配置并发出了一些 Makefile。

如果我省略-DCMAKE_FIND_ROOT_PATH=$HOME/sw/libseccomp-2.2.3/,CMake 将失败,抱怨缺少 libseccomp-2.2.3 依赖项。但是如果我确实有这个定义,它就可以工作,告诉我 CMake 了解 libseccomp-2.2.3 文件的位置,因此会正确地将路径添加到必要的编译器调用中。

但是,make没有成功,因为gcc无法从 libseccomp probject 中找到所需的头文件。检查后make VERBOSE=1,我发现 CMake 没有添加-I$HOME/sw/libseccomp-2.2.3/includegcc调用中。


我觉得这不是正确的方法。我看过的其他答案告诉我修改 CMakeLists.txt 文件,但肯定

  1. 这将无法跨多个 CMake 项目进行扩展,并且
  2. 对于每个项目,这需要我为我构建软件的每个平台(Solaris/Linux/Darwin/Cygwin)维护一个单独的 CMakeLists.txt 文件。

是否有解决此问题的规范解决方案?也许每个站点的配置文件会告诉 CMake 如何为我在该站点上构建的所有项目查找库和头文件?

cmake

0
推荐指数
1
解决办法
3297
查看次数

makefile 多个目标模式。停止

面对makefile中的以下错误

Makefile:54: *** multiple target patterns.  Stop.
Run Code Online (Sandbox Code Playgroud)

makefile 的完整源代码如下

MINGW_HOME ?= C:/mingw
PRODUCTNAME ?= Jitsi
COMPANYNAME ?= jitsi.org
PRODUCTBUILDVERSION ?= 1.0.0.0
PRODUCTBUILDVERSION_COMMA ?= 1,0,0,0
TARGET_BASENAME ?= run
TARGET_DIR ?= ../../../../release/windows/tmp

ifeq ($(wildcard /bin/cygpath.*),/bin/cygpath.exe)
    target.dir := $(shell cygpath --mixed "$(TARGET_DIR)")
    cygwin.target.dir := $(shell cygpath --unix "$(TARGET_DIR)")
else
    target.dir := $(TARGET_DIR)
    cygwin.target.dir := $(TARGET_DIR)
endif

CC = $(MINGW_HOME)/bin/gcc.exe
CPPFLAGS := $(CPPFLAGS) \
    -Wall -Wreturn-type \
    -DPSAPI_VERSION=1 \
    -DWINVER=0x0502 -D_WIN32_WINNT=0x0502 \
    -I$(target.dir) \
    -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32"
LDFLAGS = -mwindows
LIBS = -ladvapi32 -lpsapi

MACHINE …
Run Code Online (Sandbox Code Playgroud)

java eclipse gnu makefile cmake

0
推荐指数
1
解决办法
4836
查看次数

FindThreads 仅在启用 C 或 CXX 语言时有效

我正在尝试构建一个可移植的 gcc,以允许其他人使用不同的系统进行编译。

我用crosstool-ng交叉编译gcc-8.2x86_64,我建了一个静态的工具链。

我创建了以下工具链文件:

#set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(QAMF_ROOT "/opt/hyperserver-dev/x86_64-qamf")

set(COMPILER_ROOT "${QAMF_ROOT}")
set(COMPILER_PREFIX "x86_64-qamf-linux-gnu-")
set(C_COMPILER "gcc")
set(CXX_COMPILER "g++")

# specify the cross compile
set(CMAKE_C_COMPILER    ${COMPILER_ROOT}/bin/${COMPILER_PREFIX}${C_COMPILER} )
set(CMAKE_CXX_COMPILER  ${COMPILER_ROOT}/bin/${COMPILER_PREFIX}${CXX_COMPILER} )

# HyperServer sysroot path
set(HYPERSERVER_SYSROOT "${COMPILER_ROOT}/x86_64-qamf-linux-gnu/sysroot") 

# where is the target environment 
set(CMAKE_FIND_ROOT_PATH ${HYPERSERVER_SYSROOT} )

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Run Code Online (Sandbox Code Playgroud)

在我的主机上它工作得很好,我可以毫无问题地编译,但是当我在另一台机器上移动工具链文件时,我遇到了问题。如果我尝试在 cmake 中包含 Threads,则会出现以下错误: …

c++ cmake toolchain

0
推荐指数
1
解决办法
4921
查看次数

CMake FetchContent 多次下载外部依赖

我开始使用 FetchContent 来自动下载外部依赖项。与旧方法相比,它工作得很好,但我有一个可能与 FetchContent 本身无关的问题 - 外部依赖项被多次下载。我实际上是为 Android 平台构建的,但这并不重要。我这样称呼 CMakecmake -B build/arm64-v8a ...cmake -B build/x86 .... 我需要为每个 ABI(arm64-v8a、x86、...)使用单独的构建文件夹以避免重建,因为我经常在 ABI 之间切换。但是当我使用简单的 FetchContent 结构时:

FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG        release-1.8.0
)

FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
  FetchContent_Populate(googletest)
  add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
endif()
Run Code Online (Sandbox Code Playgroud)

它将为每个 ABI 下载一次外部项目(换句话说 - 每次使用不同构建文件夹的 CMake 调用一次),因为googletest_POPULATED在使用不同构建文件夹的下一次 CMake 调用中不可见。如果源文件下载一次就太棒了。

所以,我想通过SOURCE_DIRFetchContent_Declare先保存源升一级(在build/_deps/googletest-src没有build/<abi>/_deps/googletest-src文件夹)。它正确保存了源,但仍会触发重新下载,因为似乎googletest-subbuild文件夹(位于 下build/<abi>/_deps)管理googletest_POPULATED标志。

我怎样才能解决这个问题?

android cmake

0
推荐指数
1
解决办法
3214
查看次数

如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

我使用 Visual Studio 2017 使用 .vcxproj 文件构建 C++ 桌面项目。我喜欢输出目录是项目下面的子目录的默认行为。例如:

|-myproj.sln
|-myproj.vcxproj
|-----------------|--x64 --|-- myproj_release --|-- myproj.exe
Run Code Online (Sandbox Code Playgroud)

我现在想使用 CMake 而不是 .vcxproj 来定义构建,这样我就可以使用 Visual Studio Code 作为 Visual Studio 2017 的替代方案进行构建。

我使用 cmake-converter 将我的 .vcxproj 转换为 CMake 项目。生成的 CMakeLists.txt 包含:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
else()
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
endif()
Run Code Online (Sandbox Code Playgroud)

当我使用 Visual Studio 2017 打开这个 CMakeLists.txt 并构建它时,它会将可执行文件放在我的用户目录的子目录 CMakeBuilds 中。我猜这是因为 Visual Studio 2017 正在确定 CMAKE_BINARY_DIR。

与我的 .vcxproj 文件一样,将输出目录置于源目录中的最佳方法是什么?

c++ cmake visual-studio

0
推荐指数
2
解决办法
4559
查看次数

如何在 Google Cloud Platform 中安装 cmake

我正在尝试部署使用 dlib 库的 django 项目,但是在部署时,Google 控制台会抛出一个错误,提示安装 dlib 需要 CMake。这些都在我的系统中,但如何让它们在 Google Cloud 中工作?如何在 Google Cloud 中安装 cmake?我所有的包都在 requirements.txt 中提到。

谷歌控制台:

Step #1 - "builder": RuntimeError:
Step #1 - "builder": *******************************************************************
Step #1 - "builder": CMake must be installed to build the following extensions: dlib
Step #1 - "builder": *******************************************************************
Step #1 - "builder":
Step #1 - "builder":
Step #1 - "builder": ----------------------------------------
Step #1 - "builder": Running setup.py clean for dlib
Step #1 - "builder": Building wheel for face-recognition-models (setup.py): started …
Run Code Online (Sandbox Code Playgroud)

cmake python-3.x google-cloud-platform dlib

0
推荐指数
1
解决办法
657
查看次数

如何获取 CMake 单元测试的相对路径?

我有一个使用 CMake 构建的项目,它使用 Catch2 进行单元测试。一些单元测试练习从文件加载数据的代码,如下所示:

std::string resource_dir = "TEST_CWD/resources/";
std::ifstream infile{resource_dir + "datafile.txt"}
Run Code Online (Sandbox Code Playgroud)

问题是如何正确获取 的值TEST_CWD

目录结构很简单(并不是一成不变的):

my_project/
    test/
        resources/datafile.txt
        loader_test.cpp
Run Code Online (Sandbox Code Playgroud)

留空TEST_CWD有时会起作用,但在通过 IDE 运行测试时会中断。使用绝对路径设置环境变量也可以,但在其他机器上会崩溃。同样,强制所有用户手动设置环境变量也是用户不友好的。

在 CMake 项目中指定相对文件路径的好方法是什么?

c++ unit-testing cmake catch2

0
推荐指数
1
解决办法
1335
查看次数

构建llvm后找不到clang

所以,这就是我构建 LLVM 的方式

1. Download LLVM from https://github.com/llvm/llvm-project as zip and extract. 

D:/llvm-project/
                |__clang-tools-extra
                |__clang
                |__llvm
                ...
                ...
2. Building using cmake gui
    source : D:/llvm-project/llvm
    Destination : D:/llvm-project/llvm/build
    Optional toolset : host=x64
Click configure
    LLVM_TARGETS_TO_BUILD : X86
Click generate

Now I have D:/llvm-project/llvm/build/llvm.sln 

I opened llvm.sln in visual studio 15 2017
And ALL_BUILD -->Build 
Run Code Online (Sandbox Code Playgroud)

建立后我试过

"C:\Program Files (x86)\LLVM\install\bin\clang.exe" –v


但没有叮当声

c++ cmake llvm clang visual-studio

0
推荐指数
1
解决办法
779
查看次数