小编MiB*_*MiB的帖子

Windows 上使用 GTest 进行 cmake:构建开始测试,但找不到共享库

我创建了一个项目,该项目分为几个目录,每个目录在add_library(SubdirectoryProject SHARED ${ALL_FILES})CMake 中创建一个共享库。

我有一个test我使用的子目录

add_executable(unittest ${ALL_FILES})

# Dependencies
target_link_libraries(unittest
PUBLIC
    GTest::GTest
    Boost::log
    Boost::json
    magic_enum::magic_enum

    SubdirectoryProject
)

find_package(GTest REQUIRED)
enable_testing()
include(GoogleTest)
gtest_discover_tests(unittest)
Run Code Online (Sandbox Code Playgroud)

一切都构建得很好。但是,在构建测试时,cmake(或 GTest)也会尝试运行已编译的unittest二进制文件来发现测试。在 Windows 上,这不起作用,因为测试二进制文件位于其自己的构建文件夹中,而来自其他子项目的构建(共享)DLL 位于各自的文件夹中。Windows 没有 rpath。因此,执行测试二进制文件失败,并出现找不到库的错误。

那么该怎么办?在发现测试之前我真的必须手动复制 DLL 吗?我觉得必须有一种 cmake 方式来正确且自动地执行此操作,但我找不到任何东西。

windows dll cmake shared-libraries

7
推荐指数
1
解决办法
1703
查看次数

iframe 问题: <script src="..."> 根本没有加载

我在使用中遇到一些问题iframe。我一次会问一个问题。我正在LaTeX.js 游乐场上工作,想要添加一些 JavaScript 来处理\marginpars,但无论我做什么,Chrome 和 Firefox 都不会尝试加载脚本。如果在任何框架之外使用完全相同的代码,它就会起作用。

我尝试了绝对路径和相对路径,并且尝试了filehttphttps协议。总是相同的结果。

这是相关代码:

<iframe id="preview" sandbox="allow-same-origin allow-scripts">
  <html>
    <head>
      <title>LaTeX.js Show&shy;case</title>
      <meta charset="UTF-8">
      <link type="text/css" rel="stylesheet" href="css/katex.css">
      <link type="text/css" rel="stylesheet" href="css/article.css">
      <link type="text/css" rel="stylesheet" href="css/error.css">

      <script src="https://latex.js.org/js/base.js"></script>
    </head>
    ...
Run Code Online (Sandbox Code Playgroud)

问题是base.js。开发人员工具在控制台中没有显示任何错误,在源选项卡中没有显示任何条目,在网络选项卡中也没有显示任何条目。

更新:正如我在评论中所说,上面的代码是使用 JavaScript 修改 DOM 的结果;但是,设置iframe.contentWindow.document.documentElement似乎不会触发加载脚本<head>,只有答案中的选项 2 对我有用。

javascript iframe

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

带srcdoc的iframe:同一页面链接将框架中的父页面加载

通过使用以下方法引用id="sec-id"同一页面上的另一个元素,可以使用同一页面链接

<a href="#sec-id"></a>
Run Code Online (Sandbox Code Playgroud)

例如。这样的链接是相对的。

但是,如果我在LaTeX.js游乐场的iframe中使用相同的语法,则它不仅会滚动到目标元素,而且还会在ifame中(重新)加载整个游乐场页面。(请注意,我通过编程方式设置了iframe的内容iframe.srcdoc = html

示例:LaTeX.js操场,在第一部分的结尾处,单击“另请参阅第11部分”中的链接。在右侧的iframe中。

可能是什么原因?

UPDATE:现在我明白了问题的根源:浏览器使用文档的基本URL来使所有相对URL都是绝对的(请参阅参考资料<base>)。麻烦始于其iframe的内容设置为srcdoc:没有指定唯一的基本URL,在这种情况下,将使用父框架/文档的基本URL(在我的情况下为游乐场)(请参阅HTML标准)。

因此,问题就变成了:有没有办法srcdoc在基本URL中引用iframe?还是有可能使浏览器不在基础之上?或制作不更改相对#sec-idURL 的基本URL?

html iframe href hyperlink

5
推荐指数
1
解决办法
605
查看次数

为什么我必须推迟customElement定义?

似乎我必须在解析HTML主体后才定义自定义元素.如果我之前定义它,则自定义元素的内容为空.

这是一个MWE:

<!DOCTYPE html>
<html lang="en">
<head>
  <script>
    customElements.define('test-one',
      class extends HTMLElement {
        constructor() {
          super()
          console.log(this.textContent)
        }
      }
    )
  </script>
</head>

<body>
  <test-one>First.</test-one>
  <test-two>Another.</test-two>

  <script>
    customElements.define('test-two',
      class extends HTMLElement {
        constructor() {
          super()
          console.log(this.textContent)
        }
      }
    )
  </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

test-one输出""在控制台中,test-two输出"Another.".

然而,这似乎完全不直观,我浪费了很多时间阅读规范,但我没有找到这种行为的解释.有任何想法吗?指定或记录在哪里?这不是Chrome问题,Firefox表现相同.

javascript web-component custom-element

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