我有 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) 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) 我一直在尝试使用 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/include到gcc调用中。
我觉得这不是正确的方法。我看过的其他答案告诉我修改 CMakeLists.txt 文件,但肯定
是否有解决此问题的规范解决方案?也许每个站点的配置文件会告诉 CMake 如何为我在该站点上构建的所有项目查找库和头文件?
面对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) 我正在尝试构建一个可移植的 gcc,以允许其他人使用不同的系统进行编译。
我用crosstool-ng交叉编译gcc-8.2的x86_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,则会出现以下错误: …
我开始使用 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_DIR在FetchContent_Declare先保存源升一级(在build/_deps/googletest-src没有build/<abi>/_deps/googletest-src文件夹)。它正确保存了源,但仍会触发重新下载,因为似乎googletest-subbuild文件夹(位于 下build/<abi>/_deps)管理googletest_POPULATED标志。
我怎样才能解决这个问题?
我使用 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 文件一样,将输出目录置于源目录中的最佳方法是什么?
我正在尝试部署使用 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 构建的项目,它使用 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 项目中指定相对文件路径的好方法是什么?
所以,这就是我构建 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
但没有叮当声